背景
项目打包配置需要区分环境变量进行区别配置,但这个变量为平台注入的值,非 NODE_ENV,需要获取到注入的值进行配置上的区分,因此利用 node 中的子进程去执行打包命令,在执行文件中进行区分。
基础知识
Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于在多核 cpu 的系统上创建多个子进程,从而提高性能。
每个子进程总是带有三个流对象:child.stdin, child.stdout 和child.stderr。他们可能会共享父进程的 stdio 流,或者也可以是独立的被导流的流对象。
Node 提供了 child_process 模块来创建子进程,方法有:
- exec - 使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。
- spawn - 使用指定的命令行参数创建新进程。
- fork - 是 spawn()的特殊形式,用于在子进程中运行的模块,与spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,用于进程之间的通信。
利用子进程执行 npm 的命令使用的就是 exec 方法。
用法
child_process.exec 使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。
child_process.exec(command[, options], callback)
实际使用时,创建一个upload.js文件,如下:
const { exec } = require('child_process')
const _ENV = 'test'
const COMMAND = `stark upload **/*.css --appkey=1111 --env=${_ENV} --token=2222`
exec(COMMAND, (err, stdout, ) => {
if (err) {
console.log(err.stack)
console.log('Error code: ' + error.code)
console.log('Signal received: ' + error.signal)
}
console.log('stdout: ' + stdout)
console.log('stderr: ' + stderr)
})
在项目的 package.json 中,添加命令:
"scripts": {
"upload": "node ./bin/upload",
}
执行npm run upload
即可触发 upload.js 文件中的上传命令,利用子进程完成执行,在执行完成后子进程会自动关闭。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。