从Electron打包应用程序运行Cli命令

时间:2016-10-11 08:28:41

标签: node.js macos electron child-process

我正在编写一个带有ElectronNativefier软件包的Mac OSX GUI,当我在安装了Nodejs(全局)的机器上运行打包应用程序时,一切正常。 在没有安装Nodejs的计算机上找不到命令。

我正在使用Electron中的Nativefier Cli,其中包含完整的cli路径:

var cliCmd = '"'+app.getAppPath()+'/node_modules/nativefier/lib/cli.js"';

const child_process = require('child_process');
child_process.exec(cliCmd+' --name "App Name" "http://appname.tld" --platform darwin --arch x64 --electron-version "0.36.6"', function (error, stdout, stderr) {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});

我收到此错误:"env: node: No such file or directory"
检查了app.getAppPath()目录,这是正确的。

此外,我尝试传递envcwd参数,但没有成功。

child_process.exec(cliCmd+' --name "App Name" "http://appname.tld" --platform darwin --arch x64 --electron-version "0.36.6"',
{
  env: {"ATOM_SHELL_INTERNAL_RUN_AS_NODE":"1"},
  cwd: app.getAppPath()
},
function (error, stdout, stderr) {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});

我做错了什么?我也试过了child_process.spawn(),但又没有运气了。
在没有安装nodejs的机器上从我的应用程序调用打包的node_module / cli需要做什么?

1 个答案:

答案 0 :(得分:2)

我在execPath对象中找到了process 现在我可以在没有全局安装nodejs的机器上执行nodejs命令。它使用的是Electron的内置版本。

child_process.exec(process.execPath+' '+cliCmd+' --name "App Name" "http://appname.tld" --platform darwin --arch x64 --electron-version "0.36.6"',
{
  env: {"ATOM_SHELL_INTERNAL_RUN_AS_NODE":"1"},
  cwd: app.getAppPath()
},
function (error, stdout, stderr) {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});