在电子打包的应用程序中,我试图从node_modules依赖项执行服务器文件.从主要过程,我正在尝试这样的事情:
var cp = require('child_process')
cp.execFile('node', path.join(__dirname, 'node_modules/my-module/server.js'))
Run Code Online (Sandbox Code Playgroud)
我看到服务器在从我的本地命令行启动应用程序时按预期启动,但在打包为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中的二进制文件.
另外,看到这个答案:
在ASAR档案中执行一个脚本,说我需要require我的脚本 - 但是,我认为这是错误的.这实际上是在同一个进程中生成此脚本(一旦需要),而不是在执行时execFile.
您不需要将节点与电子捆绑在一起。只需确保您的 'node_modules/my-module/server.js' 打包在 asar 中并使用
cp.fork(path.resolve(__dirname, 'node_modules/my-module/server.js'))
Run Code Online (Sandbox Code Playgroud)
或者
cp.fork(require.resolve('my-module/server.js'))
Run Code Online (Sandbox Code Playgroud)
它应该工作得很好。
这样,Electron 将使用捆绑的节点,为其添加透明的 asar 支持并从 asar 存档运行脚本。
如果您cp.execFile('node'...将使用外部节点,则不支持 asar。