在打包的电子应用程序中执行Node.脚本



在电子打包应用程序中,我正在尝试从node_modules依赖项执行服务器文件。从主流程中,我正在尝试类似的东西:

var cp = require('child_process')
cp.execFile('node', path.join(__dirname, 'node_modules/my-module/server.js'))

我看到从本地命令行启动我的应用程序时服务器按预期启动,但在打包为 asar 时没有。实现这一目标的正确方法是什么?

笔记:
我调查了 https://electron.atom.io/docs/tutorial/application-packaging/#executing-binaries-inside-asar-archive:

有一些节点API可以执行二进制文件,如child_process.exec,child_process.spawn和child_process.execFile,但仅支持execFile在asar存档中执行二进制文件。

另外,看到这个SO答案:在 ASAR 存档中执行一个脚本,该脚本说我需要require我的脚本 - 但是,我认为这是错误的。这实际上在同一进程中生成此脚本(一旦需要(,而不是在执行execFile时生成。

你不需要用电子捆绑节点。只需确保您的"node_modules/my-module/server.js"打包在 asar 中并使用

cp.fork(path.resolve(__dirname, 'node_modules/my-module/server.js'))

cp.fork(require.resolve('my-module/server.js'))

它应该可以正常工作。

这样,electron将使用捆绑节点,为其添加透明的asar支持,并从asar存档运行脚本。

如果你cp.execFile('node'...你将使用外部节点,那不支持 asar。

最新更新