我正在构建一个应用程序,它使用Node.js将多个CLI应用程序捆绑在一起供内部使用。我使用了几个NPM依赖项,其中一些依赖于CLI命令。
为了方便用户,我使用Commander
's git-style sub-commands作为我自己的应用程序。该模块要求每个子命令都有一个单独的.js
文件作为二进制文件。
这与我到目前为止的情况类似,以及我想要实现的目标:
var program = require('commander'),
spawn = require('child_process').spawn;
program.parse(process.argv);
var args = ['./node_modules/exampleDep/.bin/index.js'].push(program.args);
var wrap = spawn('node', args);
wrap.stdout.on('data', function (data) {
process.stdout.write(data);
});
wrap.stderr.on('data', function (data) {
process.stderr.write(data);
});
所以基本上我试图在我自己的内部包装另一个二进制文件。这种方法有效,但感觉有些破解,它打开了Node.exe
的2个实例。
答案 0 :(得分:0)
您可以使用child_process.fork
:https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
这是用于生成Node.js进程的child_process.spawn()功能的特例。除了在普通的ChildProcess实例中具有所有方法之外,返回的对象还具有内置的通信通道。有关详细信息,请参阅[child.send(message,[sendHandle])] []。
或者如果您不想生成新的NodeJS进程,可以使用vm
模块:
https://nodejs.org/api/vm.html