如何在PM2中传递--node-args参数并在Node.js代码中读取?
PM2启动Node.js脚本传参问题解决指南
一、脚本参数的正确传递方式
别再用--node-args传自定义参数了!这个参数是给Node.js运行时本身用的(比如调整内存限制、开启调试模式),不是给你的业务脚本用的。
要给脚本传递自定义参数,PM2里必须用--做分隔符,把PM2自身的配置参数和脚本参数区分开。正确的启动命令应该是:
pm2 start file.js --name myScript -- --variable=value
注意最后那个--,它后面的所有内容都会原封不动传递给你的Node.js脚本。
二、代码中正确读取参数
你之前在Windows下能用argv.variable直接取到值,应该是依赖了minimist这类参数解析库——原生的process.argv只是一个数组,不会自动把--key=value格式的参数解析成键值对。
方法1:用minimist(推荐)
先安装依赖:
npm install minimist
然后在代码里解析参数:
const argv = require('minimist')(process.argv.slice(2)); // 直接通过键名取值 const passedIn = argv.variable; // 如果是要引入对应模块,就这么写: // const passedIn = require(argv.variable);
方法2:原生JS手动解析
不想装第三方库?自己写几行代码就能搞定:
// 跳过process.argv前两个元素(分别是node执行路径和脚本文件路径) const args = process.argv.slice(2); const argMap = {}; args.forEach(arg => { if (arg.startsWith('--')) { // 拆分键名和对应值 const [key, value] = arg.slice(2).split('='); argMap[key] = value; } }); const passedIn = argMap.variable;
三、关于--node-args的正确用法
再明确一次:--node-args是用来传递给Node.js运行时的参数,比如给脚本增加内存上限的命令:
pm2 start file.js --name myScript --node-args="--max-old-space-size=2048"
硬要把--variable=value塞到--node-args里也能执行,但Node.js会直接忽略这些自定义参数,你的脚本根本拿不到,完全没必要这么做。
四、验证参数是否传递成功
担心参数没传对?在脚本开头加一段打印代码,启动后查看PM2日志就能确认:
const argv = require('minimist')(process.argv.slice(2)); console.log('当前接收的参数:', argv);
然后执行命令查看日志:
pm2 logs myScript
一眼就能看到参数是否正确传递。
内容的提问来源于stack exchange,提问作者Arkyris
相关产品推荐
相关产品推荐

