Node.js 中的 process 对象
process 对象的作用、常用属性和方法
问题
Node.js 中的 process 对象是什么?有哪些常用的属性和方法?
解答
process 是什么
process 是 Node.js 的全局对象,提供当前进程的信息并对其进行控制。
当我们通过 node xxx.js 启动一个文件时,实际上就开启了一个服务进程。每个进程拥有独立的内存空间和数据栈,进程之间默认无法访问彼此的数据。由于 JavaScript 是单线程语言,启动后只有一条主线程执行。
常用属性
process.env
环境变量对象,常用于获取不同环境的配置信息:
// 区分开发和生产环境
if (process.env.NODE_ENV === 'production') {
// 生产环境配置
}
process.argv
获取命令行参数,返回数组:
// 执行: node app.js arg1 arg2
// process.argv[0]: Node 路径
// process.argv[1]: 被执行的文件路径
// process.argv[2]: arg1
// process.argv[3]: arg2
const args = process.argv.slice(2);
console.log(args); // ['arg1', 'arg2']
process.cwd()
返回当前进程的工作目录:
console.log(process.cwd()); // /Users/username/project
当 npm 包需要操作使用方项目的文件时,可以用 process.cwd() 获取项目路径。
其他常用属性
process.pid // 当前进程 ID
process.ppid // 父进程 ID
process.platform // 操作系统平台,如 'darwin'、'win32'
process.uptime() // 进程运行时间(秒)
process.title // 进程名称
常用方法
process.nextTick()
在下一次事件循环开始前执行回调:
function foo() {
console.log('foo');
}
process.nextTick(foo);
console.log('bar');
// 输出:
// bar
// foo
process.nextTick() 与 setTimeout(fn, 0) 的区别:
process.nextTick()在当前事件循环的调用栈清空后立即执行setTimeout(fn, 0)在下一次事件循环的 timer 阶段执行,时机不确定
进程事件监听
// 捕获未处理的异常
process.on('uncaughtException', (err) => {
console.error('未捕获的异常:', err);
});
// 进程退出监听
process.on('exit', (code) => {
console.log('进程退出,退出码:', code);
});
标准流
process.stdout.write('标准输出\n');
process.stderr.write('错误输出\n');
// 标准输入
process.stdin.on('data', (data) => {
console.log('输入:', data.toString());
});
关键点
- process 是全局对象,提供当前进程的信息和控制能力
process.env用于环境变量配置,process.argv获取命令行参数process.cwd()返回工作目录,process.nextTick()在下次事件循环前执行- 可通过
process.on()监听进程事件,如异常捕获和退出监听 process.nextTick()优先级高于setTimeout(fn, 0)
目录