• Node.js的全局对象process


      当执行一个Node.js程序时,比如node index.js,操作系统就会为它创建一个进程,分配内存,分配CPU等资源。这个进程对应到Node.js中,就是process对象。因此,可以通过process对象获取到操作系统,进程执行相关的信息,比如环境变量,程序执行的时参数,标准输入,输入流等。

      process.env:返回一个对象,它包含了程序运行时,它所在用户的环境的基本信息。用户环境应该是针对Linux系统而言,Linux操作系统是一个多用户系统,在同一时刻,可能有多个用户同时登录,每一个用户都有自己的偏好设置。当你登录系统,执行程序时,只能获取到你的环境信息,比如用户名,PATH路径(操作系统环境变量),不能获取其它用户的环境设置,这是Linux系统的权限管理。

    console.log(process.env)
    /* 
        PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin',
        USERNAME: 'sam',
    */

      想要查看哪个环境信息,直接查看env对象相应属性就好了,比如

    console.log(process.env.PATH)

      环境信息都是提前配置好的,那在程序运行时,能不能自定义环境信息,比如临时定义一个环境变量NODE_ENV?可以,比如index.js中

    console.log(process.env.NODE_ENV)

      在执行node index.js 之前定义 环境变量NODE_ENV,在linux terminal终端中 NODE_ENV=prod node index.js, 可以看到控制台输出prod。但在Windows下,临时定义环境变量又有所不同,在CMD下是 set NODE_ENV=prod node index.js, 在PowerShell下,是$env:NODE_ENV='prod' node index.js。为了抹平这种差异, cross-env 包产生了。cross-env NODE_ENV=prod node index.js, 在所有平台下,设置了环境变量NODE_ENV

      process.stdin和process.stdout:当在命令行中执行程序时,进程就会获取到当前命令窗口的控制权,所以在程序运行的过程中,可以读取在命令窗口中的输入,也可以向命令窗口输出信息。在Node.js中,命令窗口的输入会进入到process.stdin,它是一个可读流,从它里面读取数据。process.stdout 是一个可写流,它负责写入到标准输出,通常是命令窗口,我们只要向process.stdout写入数据。

    process.stdin.setEncoding('utf8');
    
    process.stdout.write('请输入姓名: ');
    process.stdin.on('data', function (text) {
        process.stdout.write(`你的姓名是 ${text}`);
    });

      node index.js,可以看到光标在闪烁,等待你的输入,这就是process.stdin, 当你输入姓名时,process.stdin就会发出data事件,我们已经监听了data 事件,所以data事件的回调函数就会执行,回调函数执行,向process.stdout写入文字,process.stdout就会向命令窗口中输出数据。不仅可以读取用户在命令窗口上输入,还可以读取其他程序在命令窗口上的输出。其他程序的输出,也相当于在命令窗口中的输入,因为在Linux下面,有一个 pipe操作符。和index.js同级,创建一个a.txt文件,随便写一点英文字符,然后把index.js改为

    process.stdin.setEncoding('utf8');
    
    process.stdin.on('data', function (text) {
        process.stdout.write(text.toUpperCase());
        process.stdout.write('\n');
    });

      在命令行中输入 cat a.txt | node index.js ,可以看到输出了大写字母。为了在命令窗口中更好的输出,Node.js对process.stdout作了进一步的封装,就是console对象,和浏览器中的console 对象一致,比如console.log(), console.info(), 它们会向process.stdout写入数据。

      其实还有一个process.stderr标准错误流,对应的, console.err就是向标准错误流中写入数据。把正确输出sdout 和错误输出stderr 进行区分,可以分别处理,比如把错误导入到另外一个文件中。比如node index.js 2> errors-file.log。2 表示错误流,1表示标准输出流。

      process.platform: 获取操作系统,比如windows, linux。不同的操作系统,执行不同的命令。

      process.argv:  获取命令行参数。启动node程序时,给命令行传递参数,可能通过process.argv获取。比如在index.js 中

    console.log(process.argv);

      在命令行中 node index.js hello world 启动程序,输出结果

      [ '/usr/bin/node',
      '/home/sam/first-program/index.js.js',
      'hello',
      'world' ]

      process.argv返回一个数组,第一个元素是node的安装路径,第二个元素是执行的文件的路径,剩下的元素就是用户输入参数。

      process.exit(), 退出程序。它可以接受一个数字参数,0表示正常退出,其它数字表示非正常退出。

  • 相关阅读:
    Integer类_java_1
    Pytest使用随笔_1_"no tests ran"
    postgres执行计划_1_索引
    Jprofile使用随笔_2_内存泄漏
    leetcode76. Minimum Window Substring
    leetcode87. Scramble String
    hihocoder1310 岛屿
    leetcode644. Maximum Average Subarray II
    leetcode132. Palindrome Partitioning II
    leetcode143. Reorder List
  • 原文地址:https://www.cnblogs.com/SamWeb/p/16428996.html
Copyright © 2020-2023  润新知