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

时间:2015-12-02 02:52:22

标签: javascript node.js npm node-commander

我正在构建一个应用程序,它使用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个实例。

1 个答案:

答案 0 :(得分:0)

您可以使用child_process.forkhttps://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