Nodejs内置模块process

内置模块process

写在前面

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

下面是process的一些常用API:

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

1. arch()

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

javascript 复制代码
const process = require("process");
console.log(process.arch); // x64

2. cwd()

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

javascript 复制代码
const process = require("process");
console.log(__dirname); // C:\Users\22706\Desktop\temp
console.log(process.cwd()); // C:\Users\22706\Desktop\temp

3. argv

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

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" : "无");

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

4. memoryUsage()

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

javascript 复制代码
const process = require("process");
console.log(process.memoryUsage());

/**
{ 运行结果
  rss: 21495808,  // 常驻集大小 物理内存的存量
  heapTotal: 5263360,  // v8给我们分配的堆内存的总大小 包括未使用的内存
  heapUsed: 4609688,  // 已经使用的内存
  external: 347074,  // 外部的内存 C C++使用的
  arrayBuffers: 19406  // 二进制的总量
}
*/

5. exit()

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

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

javascript 复制代码
const process = require("process");
setTimeout(() => {
  console.log(5);  // 输出5
}, 5000);

setTimeout(() => {
  console.log("进程退出了");
  process.exit(); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);

测试结果如下: 可以看到进程并没有等待5s后输出结果5,而是2s后输出进程退出了。

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

javascript 复制代码
const process = require("process");
setTimeout(() => {
  console.log(5);
}, 5000);

setTimeout(() => {
  console.log("进程退出了");
  process.exit(); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);

process.on("exit", () => {
  // 监听进程结束
  console.log("进程退出了");
});

代码运行结果如下:

6. kill()

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

javascript 复制代码
const process = require("process");
setTimeout(() => {
  console.log(5);
}, 5000);

setTimeout(() => {
  process.kill(process.pid); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);

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

7. env【最常用】

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

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

javascript 复制代码
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

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

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

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

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

json 复制代码
"scripts": {
    "dev": "cross-env NODE_ENV=development node process.js",
    "build": "cross-env NODE_ENV=production node process.js"
}

上面的脚本实现了运行脚本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设置环境变量:

javascript 复制代码
set NODE_ENV=production  # windows
export NODE_ENV=production  # posix

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

参考博客:xiaoman.blog.csdn.net/article/det...

相关推荐
xiaofeichaichai3 小时前
Webpack
前端·webpack·node.js
Python私教6 小时前
把开源 Agent 打包成"解压双击即用"的 Windows 便携包:一条命令的完整实现
node.js
没事别瞎琢磨8 小时前
十一、审计与 Run Session——每一步操作都被记录
人工智能·node.js
没事别瞎琢磨8 小时前
十六、AgentSandbox——把所有模块串起来的编排类
人工智能·node.js
没事别瞎琢磨8 小时前
十二、网络代理与白名单规则引擎
人工智能·node.js
没事别瞎琢磨8 小时前
十四、Git Worktree 隔离执行
人工智能·node.js
没事别瞎琢磨9 小时前
十、统一 Runner 入口——能力检测与模式回退
人工智能·node.js
没事别瞎琢磨10 小时前
八、环境隔离——构建安全的子进程环境
人工智能·node.js
没事别瞎琢磨11 小时前
六、输出捕获与截断
人工智能·node.js
没事别瞎琢磨11 小时前
七、敏感路径预检——Protected Paths
人工智能·node.js