使用Spawn方法从电子应用程序运行子进程时出现问题

时间:2018-08-23 18:34:08

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

我正在尝试找到一种使用电子打包程序在打包的电子应用程序中运行节点子进程的方法。我的要求是在未安装任何节点的机器上运行此应用程序,因此我应参考与电子应用程序捆绑在一起的节点来运行子进程。我打包了该应用程序并在未安装节点的计算机上执行了该应用程序,但是我遇到了某些问题,我试图通过在安装了节点的计算机上使用一个未打包的应用程序来重新创建同样的问题,所以现在我意识到这不是问题没有安装节点。

我正在使用带有env变量ELECTRON_RUN_AS_NODE设置的spawn方法,并将process.execPath作为命令,但是我面临以下问题。

注意:即使在安装了节点的计算机上运行的非打包应用程序上,我也遇到此错误。相同的代码可以在同一台机器上使用带有“ node”命令的exec方法代替“ process.execPath”来正常工作。

    stdout: /Users/UserName/Desktop/proj/node_modules/@firebase/firestore/node_modules/grpc/src/grpc_extension.js:57
throw e;
^Error: 
dlopen(/Users/UserName/Desktop/proj
/name/node_modules/@firebase/firestore/node_modules/grpc/
src/node/extension_binary/node-v57-darwin-x64-unknown/grpc_node.node, 
1): Symbol not found: _GENERAL_NAME_free
Referenced from: 
/Users/UserName/Desktop/proj/
name/node_modules/@firebase/firestore/node_modules/grpc
/src/node/extension_binary/node-v57-darwin-x64-unknown/grpc_node.node
 Expected in: flat namespace
 in /Users/UserName/Desktop/proj/name/node_modules/@firebase/firestore/node_modules/grpc/src/node/extension_binary/node-v57-darwin-x64-unknown/grpc_node.node
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:172:20)
at Object.Module._extensions..node (module.js:671:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:172:20)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:504:12)
at Function.Module._load (module.js:496:3)
at Module.require (module.js:586:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/Users/UserName/Desktop/proj/name/node_modules/@firebase/firestore/node_modules/grpc/src/grpc_extension.js:32:13)
at Object.<anonymous> (/Users/UserName/Desktop/proj/name/node_modules/@firebase/firestore/node_modules/grpc/src/grpc_extension.js:63:3)

请在下面找到我的代码:

'use strict'

const fixPath = require('fix-path');
let functionName = () => {
    fixPath();           
    const child = childProcess.spawn(process.execPath, [path, 
    ....args], {
      // stdio: 'ignore',
      env: {
          ELECTRON_RUN_AS_NODE: 1
      }
});

child.on('error', (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)

您可以使用spawn生成子进程并使用电子env变量。

child_process = spawn(command,args,{env: {"ELECTRON_RUN_AS_NODE":"1"}});