使用Commander.js无法获取命令行参数,program.shell返回undefined求助
问题原因与修复方案
1. npm 传递命令行参数的方式有误
当你用 npm start 给 Node.js 脚本传参数时,npm 会把 -- 之前的参数当作自身命令的参数处理,只有 -- 之后的内容才会传递给你的脚本。你原来的命令:
npm start -s config.yml
这里的 -s 会被 npm 识别为自身的静默模式参数,根本没传到 app.js 里。正确的传参方式应该是:
npm start -- -s config.yml
-- 就像一个分隔符,后面的 -s config.yml 会完整传递给你的 Node.js 脚本。
2. Commander.js 的用法错误
你代码里用了 program.command() 方法,但这个方法是用来定义子命令的(比如 git commit 里的 commit 就是子命令),不是用来定义 -s/--shell 这种选项的。要定义命令行选项,得用 program.option() 方法。
修改后的 app.js 代码如下:
const program = require('commander'); console.log(process.argv); program .option('-s, --shell <value>', '.yml config file') // 替换成 option 方法 .parse(process.argv); console.log(program.shell); // 现在能正确拿到参数值了
验证效果
运行修改后的命令:
npm start -- -s config.yml
你会看到 program.shell 输出 config.yml,问题就解决啦!
内容的提问来源于stack exchange,提问作者perennial_
相关产品推荐
相关产品推荐

