繁体   English   中英

如何使用 fork 来运行 NPM 脚本?

[英]How to use fork in order to run NPM scripts?

我有一个在 CLI 中运行良好的 NPM 启动脚本。 我正在尝试使用fork()以便它运行一个子进程,然后该子进程将一些数据返回给父进程。 然后使用 node-cron 调度程序每天运行它。

当我使用像这样的简单 exec 时它起作用

父.js

const cp = require('child_process');
cp.exec("npm run start argument1 argument2", (err, stdout, stderr) => {
     console.log('exec',stdout)
});

孩子.js

let data = someCode()
process.stdout.write("data:" + JSON.stringify(data))

但是后来我无法将数据返回给父级,所以我尝试了这个不起作用:

父.js

const cp = require('child_process');
var child = cp.fork("npm run start argument1 argument2", [], { silent: true });

child.on("message", (data) =>{
    console.log('data',data)
})

孩子.js

let data = someCode()
process.stdout.write("data:" + JSON.stringify(data))
process.send(res)

它甚至不运行脚本,它也不返回任何错误。

编辑:也许它与babel-node 这是 package.json 的样子:

{
  "scripts": {
    "start": "babel-node index.js --",
  },
  "dependencies": {
    "@babel/core": "^7.2.2",
    "@babel/node": "^7.2.2",
    "@babel/preset-env": "^7.3.1",
    "axios": "^0.18.0",
    "memory-cache": "^0.2.0",
    "moment": "^2.24.0",
    "node-cron": "^2.0.3",
    "puppeteer": "2.0.0",
    "puppeteer-firefox": "^0.5.0",
    "shelljs": "^0.8.3"
  }
}

Fork应该指向一个文件,你不需要{silent:true} ,让 fork 进程继承父 stdio。

查看下面的演示

父.js

const {fork} = require('child_process');
var child = fork("./child.js", ['argument1','argument2']);

// send data to child.js
child.send({ hello: 'world' });

// receive data from child.js
child.on("message", (fromChild) =>{
    console.log('Incoming data from child.js', fromChild)
});

孩子.js

const someCode = ()=> [1,2,3,4,5,6];
let data = someCode();

// send data to parent.js
process.send({data, custom_arguments: process.argv.slice(2)});

// receive data from parent.js
process.on('message', (fromParent) => {

    console.log('Incoming data from parent.js:', fromParent);

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM