You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:15:58