process.argv 是 node.js 中读取命令行参数的标准方式,索引 0 和 1 分别为 node 路径和脚本路径,自定义参数从索引 2 开始;常用 slice(2) 提取并解析,支持直接取值或健壮式查找,导出时宜封装为函数或配置对象,避免顶层副作用。

在 CommonJS 模块中,process.argv 是读取命令行参数的唯一标准方式,它不依赖任何第三方库,也不需要额外导入——因为 process 是 Node.js 全局对象,模块内可直接使用。
process.argv 的结构和索引规律
process.argv 是一个数组,固定包含至少 2 个元素:
-
index 0:Node.js 可执行文件的绝对路径(如
/usr/local/bin/node) -
index 1:正在运行的 JS 文件路径(如
/path/to/script.js) - index 2 起:用户实际传入的自定义参数(即你真正要读取的部分)
例如执行 node script.js --env=prod -p 3000 user123,则:
提取参数的常用写法
直接取值最简单,适合脚本型工具:
const input = process.argv[2]; // 第一个自定义参数const port = process.argv[3] || 3000; // 提供默认值
更健壮的做法是用 slice(2) 过滤掉前两项,再结合 Array.prototype.find 或循环解析:
const args = process.argv.slice(2);
const envFlag = args.find(arg => arg.startsWith('--env='))?.split('=')[1] || 'dev';
const port = args.find((arg, i) => arg === '-p' && args[i + 1]) && parseInt(args[args.indexOf('-p') + 1], 10) || 3000;
配合 CommonJS 模块导出逻辑
参数读取通常放在模块顶层,结果可作为函数入参或直接导出配置:
- 导出一个带参函数:
module.exports = (port = process.argv[2] || 3000) => { /* 启动服务 */ }; - 导出解析后的配置对象:
module.exports = { port: parseInt(process.argv[2], 10) || 8080, debug: process.argv.includes('--debug') }; - 避免在模块顶层做副作用操作(如直接启动服务器),便于单元测试和复用
注意事项
CommonJS 模块加载时会立即执行顶层代码,所以 process.argv 在 require() 时已确定——但要注意:
- 不同入口文件的
process.argv值不同,不要在被 require 的子模块里假设参数含义 - 如果模块被其他脚本
require而非直接运行,process.argv是主入口的参数,不是该模块自己的 - 不建议在模块内部修改
process.argv,会影响后续逻辑判断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











