模块概览
process是node的全局模块,作用比较直观。可以通过它来获得node进程相关的信息,比如运行node程序时的命令行参数。或者设置进程相关信息,比如设置环境变量。
环境变量:process.env
使用频率很高,node服务运行时,时常会判断当前服务运行的环境,如下所示
if(process.env.NODE_ENV === 'production'){
console.log('生产环境');
}else{
console.log('非生产环境');
}
运行命令 NODE_ENV=production node env.js
,输出如下
非生产环境
异步:process.nextTick(fn)
使用频率同样很高,通常用在异步的场景,来个简单的栗子:
console.log('海贼王');
process.nextTick(function(){
console.log('火影忍者');
});
console.log('死神');
// 输出如下
// 海贼王
// 死神
// 火影忍者
process.nextTick(fn) 咋看跟 setTimeout(fn, 0) 很像,但实际有实现及性能上的差异,我们先记住几个点:
- process.nextTick(fn) 将 fn 放到 node 事件循环的 下一个tick 里;
- process.nextTick(fn) 比 setTimetout(fn, 0) 性能高;
这里不打算深入讨论,感兴趣的可以点击这里进行了解。
获取命令行参数:process.argv
process.argv 返回一个数组,数组元素分别如下:
- 元素1:node
- 元素2:可执行文件的绝对路径
- 元素x:其他,比如参数等
// print process.argv
process.argv.forEach(function(val, index, array) {
console.log('参数' + index + ': ' + val);
});
运行命令 NODE_ENV=dev node argv.js --env production
,输出如下。(不包含环境变量)
参数0: /Users/a/.nvm/versions/node/v6.1.0/bin/node
参数1: /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.22-node-process/argv.js
参数2: --env
参数3: production
获取node specific参数:process.execArgv
跟 process.argv 看着像,但差异很大。它会返回 node specific 的参数(也就是运行node程序特有的参数啦,比如 --harmony)。这部分参数不会出现在 process.argv 里。
我们来看个例子,相当直观。输入命令 node --harmony execArgv.js --nick chyingp
, execArgv.js 代码如下:
process.execArgv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
});
// 输出:
// 0: --harmony
process.argv.forEach(function(val, index, array) {