node全局对象_process - dkvirus/npm-resource-read GitHub Wiki

1. 继承 EventEmitter

process 是 EventEmitter 的实例对象,也有 on 和 emit 方法。

// 监听事件
process.on('some_event', function() { 
    console.log('some_event 事件触发'); 
});

// 触发事件
setTimeout(function() { 
    process.emit('some_event'); 
}, 3000); 

2. 全局属性

属性 说明
process.platform 查看系统是 'win32'(windows) 还是 'darwin'(mac)
process.arch 查看系统是 x64(64位系统) 还是 x86(32位系统)
process.pid node程序进程号
process.getuid() 当前运行的 process 自身进程号
process.title = 'npm' 属性用于获取或设置当前进程在 ps 命令中显示的进程名字

3. process.argv

输出命令行参数,返回值是一个数组,第一个值为 node 安装路径,第二个值为命令脚本路径,之后才是传递的参数。

$ npm logo 
[ '/Users/dkvirus/.nvm/versions/node/v8.11.3/bin/node',
  '/Users/dkvirus/.nvm/versions/node/v8.11.3/bin/npm',
  'logo' ]

4. process.execPath

返回 node 安装路径。

5. process.env

查询或者设置环境变量。

// 查询所有环境变量
console.log(process.env)

// 设置环境变量
process.env.HOME='/Users/dkvirus'

6. process.exitCode

当进程正常结束,或通过process.exit()结束但未传递参数时,此数值标识进程结束的状态码。

7. uncaughtException 事件

nonexistentFunc 方法为定义,运行会报错 undefined,阻断程序继续运行。

nonexistentFunc();
console.log('这里不会运行。');

$ node process.js
/Users/dkvirus/Documents/npm-test/test/process.js:23
nonexistentFunc();
^

ReferenceError: nonexistentFunc is not defined
    at Object.<anonymous> (/Users/dkvirus/Documents/npm-test/test/process.js:23:1)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3

使用 uncaughtException 可以处理未定义的错误。

var fs = require('fs')
process.on('uncaughtException', (err) => {
    fs.writeSync(1, `捕获到异常:${err}\n`);
});
  
setTimeout(() => {
    console.log('这里仍然会运行。');
}, 500);

// 故意调用一个不存在的函数,应用会抛出未捕获的异常。
nonexistentFunc();
console.log('这里不会运行。');

$  node process.js
捕获到异常:ReferenceError: nonexistentFunc is not defined
这里仍然会运行。

8. process.cwd()、__dirname 与 __filename

src > $ node test/index.js

  • process.cwd() 运行目录:/src/
  • __dirname 脚本所在目录:/src/test
  • __filename 脚本文件绝对路径:/src/test/index.js

9. process.version 与 process.versions

单数形式 version 只能获得 node 版本号,但不是语义化版本号(前面多个v),复数形式可以获得 nodejs 相关的一些东东的版本,符合语义化版本。

process.version   
# 'v8.11.3'

process.versions
# { http_parser: '2.8.0',
  node: '8.11.3',
  v8: '6.2.414.54',
  uv: '1.19.1',
  zlib: '1.2.11',
  ares: '1.10.1-DEV',
  modules: '57',
  nghttp2: '1.32.0',
  napi: '3',
  openssl: '1.0.2o',
  icu: '60.1',
  unicode: '10.0',
  cldr: '32.0',
  tz: '2017c' }
⚠️ **GitHub.com Fallback** ⚠️