节点 child_process 分叉时传递 argv

Node child_process pass argv when forked

我有带有 Express 服务器的 Node 应用程序。我在服务器文件夹中也有节点脚本。在某些事件中,我需要从单独的节点脚本获取数据,因此我创建了子进程。

没有参数,一切正常,但我需要从父进程传递一些数据。

var express = require('express');
var router = express.Router();
var child_process = require('child_process');

router.get('/:site/start', function(req, res, next) {
        const basedir = req.app.get('basedir');
        const child_script_path = basedir + '/scripts/script.js';
        const child_argv = [
            '--slowmo=0',
            '--headless=1'
        ];

        child = child_process.fork(child_script_path, {
            execArgv: child_argv
        });

        ...
    }
});

当我尝试通过 Express 传递参数和 运行 脚本时,显示了这些错误:

/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --slowmo=0
/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --headless=1

但是当我从命令行 运行 编写脚本时,如:

node /scripts/script.js --slowmo=0 --headless=1

我没有收到任何错误,脚本可以从命令行捕获参数。

在这种情况下如何将参数传递给子脚本?

Ubuntu 16.04
节点 8.9.4
快递 4.15.5

execArgv 选项用于为执行过程传递参数,而不是为您的脚本传递参数。
这对于将特定的执行环境传递给您的分叉进程可能很有用。

如果你想给你的脚本传递参数,你应该使用args
child_process.fork(modulePath[, args][, options])

示例:

const child_process = require('child_process');

const child_script_path = './script.js';
const child_argv = [
  '--foo',
  '--bar'
]
const child_execArgv = [
  '--use-strict'
]

let child = child_process.fork(child_script_path, child_argv, {
  execArgv: child_execArgv  // script.js will be executed in strict mode
})

// script.js
console.log(process.argv[2], process.argv[3])  // --foo --bar