【问题标题】:Can we launch a node command on a mac without node installed when using electron-packager?使用 electron-packager 时,我们可以在没有安装节点的 mac 上启动节点命令吗?
【发布时间】:2019-01-17 04:45:53
【问题描述】:

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

我一直在努力实现这一目标并面临各种问题,电子社区建议我使用 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();
 }

【问题讨论】:

  • 如果您使用的是 electron builder 或其他电子打包工具,则该节点全部内置在安装程序/解包中。您无需安装节点即可执行分叉进程。它已经包含在内了......你应该能够做到...... require('child_process').execSync('mycommand.exe');
  • 你能告诉我我的代码出了什么问题吗?
  • 当您在示例的第 5 行执行 console.log fixPath() 时……您会得到什么?还有你在说什么,scriptPath?
  • console.log fixPath() 打印未定义,我通过 scriptPath 保留脚本的路径。
  • 我很困惑....什么是“scriptPath”...您需要在 childProcess.exec 中指定位置路径,以便节点可以执行它...实际的节点脚本在哪里在你的文件系统上?

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


【解决方案1】:

是的,即使在没有安装节点的系统上,我们也可以运行一个运行子节点进程的打包应用程序。可以使用“fork”方法运行节点进程并设置 ELECTRON_RUN_AS_NODE 环境变量。请在下面找到示例代码。

 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();

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 2019-04-23
    • 1970-01-01
    • 2023-03-25
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多