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

Phi*_*lip 3 macos child-process node.js electron

我正在使用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}`);
});
Run Code Online (Sandbox Code Playgroud)

我收到此错误:"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}`);
});
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*lip 5

我在对象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}`);
});
Run Code Online (Sandbox Code Playgroud)