process 对象
process 对象是 Node 的全局变量,使用时不需要实用 require(),可直接使用。
Node 中文文档中说到:process 对象控制着当前 Node.js 的进程。
看到上面那句描述,不知道你有上面感想,反正对于我来说,很长一段时间不明白 Node.js 的进程具体指啥,以至于只知道有 process 这个东西以及了解它的几个方法,但不知道什么时候应该使用它们。
我们在写 node 程序时,少不了要和命令行工具打交道,win系统下也就是 dos 窗口或者逼格高点使用其它更酷炫的终端工具。
没错,这就是 node.js 的进程,而 process 对象主要就是处理这部分的东东而诞生的。
1. process.argv 属性
本文测试根目录为: D:\code\node\process-demo
在根目录下新建文件 argv.js,内容如下:
console.log(process.argv);
在 dos 窗口中执行该文件,打印结果如下:
我们可以在 $ node argv.js
后面继续写一些参数,然后使用 process.argv 属性来获取。
process.argv 属性获取到的是个数组:
其中第一项值为 node.exe 在你计算机上的安装路径;
第二项值为当前执行文件 argv.js 在你计算机上的路径;
第三项往后才是你在
$ node argv.js
后面写的自定义参数。
**啥?**没事写这些自定义参数干嘛用?
用处可大着了,process.argv 在自定义命令行工具中起到了直观重要的作用。
如果你想制作一个属于自己的命令行工具,[制作自定义的命令行工具](https://my.oschina.net/u/3500483/blog/1186407)。
通常,我们只需要获取 $ node argv.js
后面紧着的参数,在本例中就是 ['aa', 'bb=22', 'cc']。
修改 argv.js 文件,内容如下:
console.log(process.argv);
console.log(process.argv.slice(2));
再打印一下看看吧!
2. process.cwd() 方法
本文测试根目录为: D:\code\node\process-demo
在根目录下再新建目录 bin 目录,并在 bin 目录下新建 cwd.js 文件,目录结构如下:
- process-demo
- bin
+ cwd.js
+ index.js
在 cwd.js 文件中输入以下内容:
console.log('__dirname: %s', __dirname); // 打印 __dirname 路径
console.log('cwd(): %s', process.cwd()); // 打印 process.cwd() 路径
在 dos 窗口中执行该文件,打印结果如下:
这里介绍下 __dirname 变量,同 process 对象一样,这也是一个全局属性,用于打印路径,与同样打印路径的 process.cwd() 二者及其易于混淆,所以这里一并做测试。
由上图可得出结论:
process.cwd() 打印出当前执行目录的路径,可看到上图中画红圈位置;
__dirname 打印执行的那个 js 所在的路径;
所以想要获取当前执行文件路径使用 __dirname,想要获取执行目录路径使用 process.cwd()。
3. process.exit(1) 方法
本文测试根目录为: D:\code\node\process-demo
在跟目录下新建 exite.js 文件,内容如下:
console.log(111);
console.log(222);
在 dos 窗口中执行该文件,打印结果如下:
此时跟我们想象的一下,打印出来了 111 和 222。
现在修改 exit.js 文件,内容如下:
console.log(111);
if (true) {
process.exit(1); // 执行到这里就会跳出程序,不会执行下面的代码了
}
console.log(222);
在 dos 窗口中执行该文件,打印结果如下:
可以看到:使用 process.exit(1)
可以终止程序,导致程序下面的代码不会继续执行了。
实际应用场景多为在条件判断中,当发生某种错误时,终止程序继续执行。