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

时间:2017-05-15 13:43:45

标签: node.js electron

在电子打包应用程序中,我试图从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

  

Node API可以执行像child_process.exec,child_process.spawn和child_process.execFile这样的二进制文件,但只支持execFile来执行asar archive中的二进制文件。

另外,看到这个SO答案: Executing a script inside an ASAR archive表示我需要require我的剧本 - 但是,我认为这是错误的。这实际上是在同一个过程中生成此脚本(一旦需要),而不是在执行execFile时生成。

1 个答案:

答案 0 :(得分:1)

您不需要将节点与电子捆绑在一起。 只要确保将您的“ 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'))

它应该可以正常工作。

这样,电子将使用捆绑的节点,向其添加透明的asar支撑,并运行asar存档中的脚本。

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