process 对象

process 对象是 Node 的全局变量,使用时不需要实用 require(),可直接使用。

Node 中文文档中说到:process 对象控制着当前 Node.js 的进程。

看到上面那句描述,不知道你有上面感想,反正对于我来说,很长一段时间不明白 Node.js 的进程具体指啥,以至于只知道有 process 这个东西以及了解它的几个方法,但不知道什么时候应该使用它们。

我们在写 node 程序时,少不了要和命令行工具打交道,win系统下也就是 dos 窗口或者逼格高点使用其它更酷炫的终端工具。

没错,这就是 node.js 的进程,而 process 对象主要就是处理这部分的东东而诞生的。

nodejs 的进程

1. process.argv 属性

本文测试根目录为: D:\code\node\process-demo

在根目录下新建文件 argv.js,内容如下:

console.log(process.argv);

在 dos 窗口中执行该文件,打印结果如下:

process.argv

我们可以在 $ 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 窗口中执行该文件,打印结果如下:

process.cwd()

这里介绍下 __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 窗口中执行该文件,打印结果如下:

process.exit(1)1

此时跟我们想象的一下,打印出来了 111 和 222。

现在修改 exit.js 文件,内容如下:

console.log(111);

if (true) {
    process.exit(1);    // 执行到这里就会跳出程序,不会执行下面的代码了
}

console.log(222);

在 dos 窗口中执行该文件,打印结果如下:

process.exit(1)2

可以看到:使用 process.exit(1) 可以终止程序,导致程序下面的代码不会继续执行了。

实际应用场景多为在条件判断中,当发生某种错误时,终止程序继续执行。

results matching ""

    No results matching ""