如何将模块从 Electron 应用程序公开到外部模块

Ogd*_*ila 5 node.js webpack electron electron-builder

我正在创建一个 Electron 应用程序,并使用electro-builder来打包和构建该应用程序。用户可以为应用程序制作插件(插件可以是具有自己的依赖项等的节点模块)。除了将应用程序的 API 暴露给插件的应用程序部分之外,一切都工作正常。

我在应用程序中创建了一个模块,用于处理插件“Plugin-handler”,该模块导入插件并向插件公开 API (应用程序的 API 只是一组函数,它与应用程序捆绑在一起)

困境是用户应该能够将插件放置在其计算机上的任何位置,并且应用程序在构建之前不知道路径。因此,我在 Electron-builder 配置中排除了“plugin-handler”模块,因此它不会与 Webpack 捆绑在一起。现在我需要找到向插件公开 API 的正确方法。

以下是我现在的做法,加载插件并传递 API:

// In the Plugin-handler module
const API = require('api')
const plugin = require('path-to-plugin')( API ) 
Run Code Online (Sandbox Code Playgroud)
  • 插件路径由用户在导入插件时在应用程序中添加。

如上所示,目前我将 API 作为参数传递给插件,这并不理想,相反,我需要一种方法将 API 模块 (或应用程序中捆绑的任何其他模块)公开 给插件,以便用户可以在他们的插件中访问它,如下所示

// In the plugin 
const { arg1, arg2,... } = require('api')
Run Code Online (Sandbox Code Playgroud)

我见过应用程序这样做,并允许用户在插件中访问他们的 API,但由于我对这一切都是新手,我可能做错了事情,所以请善待,并感谢您的帮助!

为了更好地描述问题,我画了一个简单的图表: 应用程序的结构