• Nodejs内置模块process


    内置模块process

    写在前面

    process是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API。

    下面是process的一些常用API:

    序号API作用
    1process.arch跟之前的os.arch()一样 获取操作系统位数【cpu架构】
    2process.cwd()返回当前端工作目录 和__dirname类似 但是esm模式下是用不了__dirname的 可以用cwd()代替
    3process.argvargv属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。第一个元素将是execPath。第二个元素是要执行的JavaScript文件的路径。剩下的元素将是任何附加的命令行参数。
    4process.memoryUsage返回内存信息
    5process.exit()实现进程强制退出
    6process.kill()和process.exit()类似 杀死进程 需要一个参数pid 即进程id 使用process.pid获取
    7process.env【最常用】获取操作系统所有的环境变量 最常用的一个属性

    1. arch()

    process.arch() 跟之前学的os.arch()一样,用于获取操作系统位数【或者说是cpu架构】。

    const process = require("process");
    console.log(process.arch); // x64
    
    • 1
    • 2

    2. cwd()

    process.cwd() 返回当前端工作目录,和__dirname类似,但是esm模式下是用不了__dirname的,这种情况下就可以使用process.cwd()代替它来使用了。

    const process = require("process");
    console.log(__dirname); // C:\Users\22706\Desktop\temp
    console.log(process.cwd()); // C:\Users\22706\Desktop\temp
    
    • 1
    • 2
    • 3

    3. argv

    process.argv属性会返回一个数组,其中包含启动Node.js进程时传递的命令行参数。第一个元素将是execPath。第二个元素是要执行的JavaScript文件的路径。剩下的元素将是任何附加的命令行参数。

    const process = require("process");
    console.log(process.argv); // ['D:\\nodejs\\node.exe', 'C:\\Users\\22706\\Desktop\\temp\\process.js']
    // 这里测试输入命令行的额外参数 --version 如果有--version就输出1.0.0 否则输出'无'
    console.log(process.argv.includes("--version") ? "1.0.0" : "无");
    
    • 1
    • 2
    • 3
    • 4

    代码测试结果如下:
    在这里插入图片描述
    可以看到只要命令增加了额外的参数,使用process.argv输出的数组的第三个元素开始将会是命令增加的额外参数值。

    4. memoryUsage()

    process.memoryUsage()会返回电脑内存相关的信息。

    const process = require("process");
    console.log(process.memoryUsage());
    
    /**
    { 运行结果
      rss: 21495808,  // 常驻集大小 物理内存的存量
      heapTotal: 5263360,  // v8给我们分配的堆内存的总大小 包括未使用的内存
      heapUsed: 4609688,  // 已经使用的内存
      external: 347074,  // 外部的内存 C C++使用的
      arrayBuffers: 19406  // 二进制的总量
    }
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5. exit()

    process.exit() 实现进程的强制退出。

    比如有一个5s的定时器,5s结束会自动退出进程,另外有个2s的定时器,2s的定时器的回调内调用process.exit()实现强制退出,则不会再等待5s的定时器结束再结束进程,测试代码如下:

    const process = require("process");
    setTimeout(() => {
      console.log(5);  // 输出5
    }, 5000);
    
    setTimeout(() => {
      console.log("进程退出了");
      process.exit(); // 强制退出进程 不再等待上一个定时器输出5
    }, 2000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    测试结果如下:
    在这里插入图片描述
    可以看到进程并没有等待5s后输出结果5,而是2s后输出进程退出了。

    另外,process还可以通过Apion监听进程退出:

    const process = require("process");
    setTimeout(() => {
      console.log(5);
    }, 5000);
    
    setTimeout(() => {
      console.log("进程退出了");
      process.exit(); // 强制退出进程 不再等待上一个定时器输出5
    }, 2000);
    
    process.on("exit", () => {
      // 监听进程结束
      console.log("进程退出了");
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    代码运行结果如下:
    在这里插入图片描述

    6. kill()

    process.kill()process.exit()类似,杀死进程,它需要一个参数pid, 即进程id,使用process.pid获取进程id。

    const process = require("process");
    setTimeout(() => {
      console.log(5);
    }, 5000);
    
    setTimeout(() => {
      process.kill(process.pid); // 强制退出进程 不再等待上一个定时器输出5
    }, 2000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果和process.exit()一样。

    7. env【最常用】

    process.env用于获取操作系统所有的环境变量,它是process模块最常用的一个属性。

    并且可以通过它修改环境变量,但是修改只在当前进程生效,并不会真正影响系统的环境变量。

    const process = require("process");
    console.log(process.env);  // 输出一大堆电脑配好的环境变量
    console.log(process.env.VSCODE_INJECTION); // 1
    process.env.VSCODE_INJECTION = "2270633333";  // 测试修改环境变量
    console.log(process.env.VSCODE_INJECTION); // 2270633333
    
    • 1
    • 2
    • 3
    • 4
    • 5

    学习环境变量有什么用呢?

    最常见的用途就比如:根据环境变量区分是开发环境还是生产环境 从而判断接口请求是使用http协议还是https协议

    我们经常使用webpack vite等构建工具都会下载一个第三方库 cross-env 通过这个第三方库设置对应环境变量。

    安装完成后我们就可以在package.json中设置对应脚本:

    "scripts": {
        "dev": "cross-env NODE_ENV=development node process.js",
        "build": "cross-env NODE_ENV=production node process.js"
    }
    
    • 1
    • 2
    • 3
    • 4

    上面的脚本实现了运行脚本npm run dev后,cross-env会设置名为NODE_ENV的环境变量值为development,并运行脚本node process.js在node环境下运行上面的process.js文件,运行npm run build同理,实现了运行不同脚本从而通过NODE_ENV来设置不同环境变量值,当然,环境变量名不一定都得取NODE_NEV,可以自定义随意取。

    下面我们执行脚本npm run dev测试结果如下:

    在这里插入图片描述

    cross-env的原理就是如果是windows就调用set,如果是posix就调用export设置环境变量:

    set NODE_ENV=production  # windows
    export NODE_ENV=production  # posix
    
    • 1
    • 2

    因此,使用第三方模块cross-env不需要考虑兼容性问题。

    参考博客:https://xiaoman.blog.csdn.net/article/details/132654000?spm=1001.2014.3001.5502

  • 相关阅读:
    vscode常用快捷键(动图演示)
    大一学生《Web编程基础》期末网页制作 基于HTML+CSS+JavaScript响应式个人主页相册介绍模板
    技术人员的职业发展规划的思考
    优化gin表单的错误提示信息
    【TB作品】MSP430,G2533单片机,红外发射,红外接收,红外通信,IR发射
    RandomForestClassifier 与 GradientBoostingClassifier 的区别
    数据结构之栈
    基本微信小程序的新冠疫苗预约小程序
    面试中常问到的C++11的题目和答案
    正式版 API 确定 | Android 12L Beta 1 发布
  • 原文地址:https://blog.csdn.net/weixin_43599321/article/details/133780709