freeCodeCamp/guide/chinese/nodejs/process/index.md

3.1 KiB
Raw Blame History

title localeTitle
Process Object 过程对象

过程对象

Node.js中的process对象是一个全局对象,可以在任何模块内访问,而不需要它。 Node.js中提供的全局对象或属性非常少process就是其中之一。它是Node.js生态系统中的一个重要组件因为它提供了有关程序运行时的各种信息集。为了探索我们将使用其中一个名为process.versions属性。此属性告诉我们有关已安装的Node.js版本的信息。它必须与-p标志一起使用。

$ node  -p "process.versions" 
 
 # output 
 { http_parser: '2.8.0', 
  node: '8.11.2', 
  v8: '6.2.414.54', 
  uv: '1.19.1', 
  zlib: '1.2.11', 
  ares: '1.10.1-DEV', 
  modules: '57', 
  nghttp2: '1.29.0', 
  napi: '3', 
  openssl: '1.0.2o', 
  icu: '60.1', 
  unicode: '10.0', 
  cldr: '32.0', 
  tz: '2017c' } 

您可以检查的另一个属性是process.release 它与我们在安装Node.js时使用的命令$ node --version相同,但这次输出将更加详细。

node -p "process.release" 
 
 # output 
 { name: 'node', 
  lts: 'Carbon', 
  sourceUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2.tar.gz', 
  headersUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2-headers.tar.gz' } 

这些是我们可以在命令行中使用的一些不同命令来访问信息,否则模块无法提供。此process对象是EventEmitter类的一个实例它包含自己的预定义事件例如exit 可用于了解Node.js中的程序何时完成其执行。运行以下程序您可以观察到结果是状态代码0 。在Node.js中此状态代码表示程序已成功运行。

process.on('exit', code => { 
    setTimeout(() => { 
        console.log('Will not get displayed'); 
    }, 0); 
 
    console.log('Exited with status code:', code); 
 }); 
 console.log('Execution Completed'); 

上述计划的输出:

Execution Completed 
 Exited with status code: 0 

Process还提供了与之交互的各种属性。其中一些可以在Node应用程序中使用以提供在Node应用程序和任何命令行界面之间进行通信的网关。如果使用Node.js构建命令行应用程序或实用程序这非常有用

  • process.stdin可读的流
  • process.stdout可写流
  • process.stderr一个可以识别错误的可用流

使用argv您始终可以访问在命令行中传递的参数。 argv是一个数组它将Node本身作为第一个元素将文件的绝对路径作为第二个元素。从第三个元素开始它可以有多个参数。

尝试以下程序,以更深入地了解如何使用这些不同的属性和功能。

process.stdout.write('Hello World!' + '\n'); 
 
 process.argv.forEach(function(val, index, array) { 
    console.log(index + ': ' + val); 
 }); 

如果使用以下命令运行上面的代码,您将获得输出,并且打印前两个元素是argv

$ node test.js 
 
 # output 
 Hello World! 
 0: /usr/local/bin/node 
 1: /Users/amanhimself/Desktop/articles/nodejs-text-tuts/test.js