使用commander时npm run脚本无法传递CLI选项的问题
解决npm run传递CLI选项失效的问题
问题场景
使用commander编写CLI脚本时,执行npm run command foo,src/cli.js可以正常接收foo作为参数;但执行npm run command foo --force时,--force选项无法传递至目标脚本。相关package.json配置如下:
{ "name": "example", "version": "0.0.1", "description": "This app's CLI is going to have problems", "main": "src/app.js", "scripts": { "serve": "node src/app.js", "command": "node src/cli.js" }, "dependencies": { "commander": "^12.1.0" } }
问题原因
npm会将npm run命令中出现的无--分隔的选项,视为npm自身的参数处理,不会传递给你指定的CLI脚本。直接添加--force时,npm会认为这是给npm run的选项,而非你的脚本需要的参数。
解决方案
在要传递给脚本的参数前添加--分隔符,npm会将--之后的所有参数原封不动地转发给目标CLI脚本。正确的执行命令应为:
npm run command -- foo --force
验证示例
如果你的src/cli.js配置如下:
const { program } = require('commander'); program .argument('<foo>') .option('--force', '启用强制模式') .action((foo, options) => { console.log('接收的foo参数:', foo); console.log('强制模式是否开启:', options.force); }); program.parse();
执行修正后的命令后,控制台会输出:
接收的foo参数: foo 强制模式是否开启: true
内容的提问来源于stack exchange,提问作者Nick Steele
相关产品推荐
相关产品推荐

