本文转载自微信公众号《JS日报》,作者慧慧。转载本文请联系JS每日一问公众号。1、什么是进程对象?它是一个全局变量,提供有关当前Node.js进程的信息并对其进行控制。作为一个全局变量,我们都知道进程计算机系统进行资源分配和调度的基本单位是操作系统,其结构的基础是线程容器。当我们启动一个js文件时,其实是启动了一个服务进程。每个进程都有自己独立的空间地址和数据栈,就像另一个进程不能访问当前进程的变量和数据结构一样,只有经过数据通信,进程之间的数据共享才有可能。由于JavaScript是单线程语言,通过节点xxx启动一个文件后,只有一个主线程。2.属性和方法一个进程的常用属性如下:process.env:环境变量,比如`process.env.NODE_ENV获取不同环境项目的配置信息process.nextTick:这个在讲EventLoop的时候经常提到process.pid:获取当前进程idprocess.ppid:当前进程对应的parentProcessprocess.cwd():获取当前进程的工作目录,process.platform:获取当前进程所在的操作系统平台runningprocess.uptime():当前进程的运行时间,例如:pm2守护进程的uptime值Processevent:process.on('uncaughtException',cb)捕获异常信息,process.on('exit',cb)进程启动并监控三个标准流:process.stdout标准输出、process.stdin标准输入、process.stderr标准错误输出进程。title指定进程的名称。有时需要为进程指定一个名称。下面介绍一些方法的使用:process.cwd()返回当前Node进程执行的目录。一个Node模块A通过npm发布,项目B使用它模块A。当需要在A中操作B项目下的文件时,可以使用process.cwd()获取B项目的路径process.argv终端通过Node执行命令时,可以通过process.argv获取传入的命令行参数,返回值是一个数组:0:节点路径(一般不用,直接忽略)1:执行的JS文件路径(一般不用,直接忽略)2~n:传入命令的实际参数所以,我们直接获取来自process.argv[2]。constargs=process.argv.slice(2);process.env返回一个对象,里面存储了当前环境相关的所有信息,很少直接使用。一般我们会在process.env上挂载一些变量来标识当前环境。例如,process.env.NODE_ENV是区分开发和生产的最常用方式。在vue-cli的源码中,经常会看到process.env.VUE_CLI_DEBUG来标识当前是否处于DEBUG模式。process.nextTick()我们知道NodeJs是基于事件轮询的,在这个过程中,同时只会处理一件事情。在这种处理方式下,process.nextTick()就是定义一个action,让这个action在下一个事件轮询时间点执行。例如,下面的例子将一个foo函数调用functionfoo(){console.error('foo');}process.nextTick(foo);console.error('bar');输出结果是bar和foo,虽然下面的方法也可以达到同样的效果:setTimeout(foo,0);console.log('bar');两者的区别在于:process.nextTick()会在事件循环的调用栈清空后(下一个事件循环开始前)重新启动调用回调setTimeout()不知道调用栈什么时候清空,所以调用回调函数时不确定参考http://nodejs.cn/api/process.htmlhttps://vue3js.cn/interview/
