Javascript 如何从自己的Node.js脚本调用不同的Node.js脚本?

Javascript 如何从自己的Node.js脚本调用不同的Node.js脚本?,javascript,node.js,npm,node-commander,Javascript,Node.js,Npm,Node Commander,我正在构建一个应用程序,它使用Node.js将多个CLI应用程序捆绑在一起供内部使用。我使用了几个NPM依赖项,其中一些依赖项有自己的用于CLI命令的二进制文件 为了便于用户使用,我将其用于我自己的应用程序。该模块要求每个作为二进制文件的子命令都有一个单独的.js文件 这与我到目前为止所拥有的以及我正在努力实现的目标类似: var program = require('commander'), spawn = require('child_process').spawn; prog

我正在构建一个应用程序,它使用Node.js将多个CLI应用程序捆绑在一起供内部使用。我使用了几个NPM依赖项,其中一些依赖项有自己的用于CLI命令的二进制文件

为了便于用户使用,我将其用于我自己的应用程序。该模块要求每个作为二进制文件的子命令都有一个单独的
.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

实例。您可以使用
child\u process.fork

这是生成Node.js进程的child_process.spawn()功能的一个特例。除了在一个普通的ChildProcess实例中拥有所有方法外,返回的对象还内置了一个通信通道。有关详细信息,请参见[child.send(message[sendHandle])][]

或者,如果您不想生成新的NodeJS进程,可以使用
vm
模块:

我不知道我怎么会错过这个。感谢您指出:)@Eclecticist请注意,我添加了对
vm
模块的引用-如果您想多次运行您信任的非大型代码,这非常方便。如果您有需要多个执行“沙盒”的用例,则特别方便。不过,脚本在同一个VM中运行,所以不能并行运行。