使用电子打包程序时,可以在未安装节点的Mac上启动node命令吗?

时间:2018-08-09 16:15:14

标签: node.js electron child-process electron-packager

当我使用电子打包程序打包电子应用程序时。该应用程序生成一个使用“ node”命令的子进程。现在,如果我尝试在未安装任何节点的系统中启动我的应用程序,该应用程序可以工作吗?

我一直在尝试实现这一目标,并面临各种问题,电子社区建议我使用fork方法,使用'Process.execPath'作为命令的spawn方法并设置ELECTRON_RUN_AS_NODE变量,但最终似乎无济于事。

现在,在完成所有这些之后,我问自己一个问题,我是否确实需要在系统上安装节点才能运行该应用程序?还是真的可以将父环境(我相信有节点)传递给子进程?如果是,我在这里想念什么?

需要注意的是,当从GUI应用程序运行时,我正在使用'fixpath()'在macOS上设置$ PATH。不知道这是否弄乱了我的代码。 https://www.npmjs.com/package/fix-path

请在下面找到我的代码:

'use strict'
 const fixPath = require('fix-path');

 let func = () => {
   fixPath();   
   const child = childProcess.exec('node scriptPath --someFlags', {
     detached: true, 
     stdio: 'ignore',
     env: {
       ELECTRON_RUN_AS_NODE: 1,
     }
 });
 child.on('error', (err) => {
   console.log("\n\t\tERROR: spawn failed! (" + err + ")");
 });

 child.stderr.on('data', function(data) {
   console.log('stdout: ' +data);
 });

 child.on('exit', (code, signal) => {
   console.log(code);
   console.log(signal);
 });

 child.unref();
 }

1 个答案:

答案 0 :(得分:0)

是的,我们可以运行一个打包的应用程序,即使在未安装任何节点的系统上,该应用程序也可以运行子节点进程。可以通过设置ELECTRON_RUN_AS_NODE env变量来使用“ fork”方法来运行节点进程。请在下面找到示例代码。

 let func = () => {
   const child = childProcess.fork(path, args, 
   {
     detached: true, 
     stdio: 'ignore',
     env: {
        ELECTRON_RUN_AS_NODE: 1
     }
   }

 });

 child.on('error', (err) => {
   console.log("\n\t\tERROR: spawn failed! (" + err + ")");
 });

 child.on('exit', (code, signal) => {
   console.log(code);
   console.log(signal);
 });

 child.unref();