为何Windows PowerShell中NPM脚本无法正确传递运行参数?
问题成因
该问题是PowerShell与Windows批处理脚本的参数解析机制不兼容导致,不属于npm本身的功能Bug:
- Windows环境下的npm入口是
npm.cmd批处理文件,当你在PowerShell中执行带--的npm命令时,--会被PowerShell的原生参数解析逻辑识别为自身的「停止解析标记」并提前消费,不会传递给npm.cmd进程 - 缺少了
--标记的npm无法区分传入参数是给npm自身的还是给执行脚本的,因此会默认吞掉后续的脚本参数 - cmd环境下没有该参数解析逻辑,所以执行完全正常
解决方案
有三种可直接落地的解决方式:
- 给
--增加引号包裹,强制PowerShell将其作为普通字符串传递给npm:
npm run index '--' -a -b -c
- 使用PowerShell原生的
--%停止解析标记,告知PowerShell不对后续内容做任何解析,原样传递给目标程序:
npm run index --% -- -a -b -c
- 将npm升级到9.0.0及以上版本,该版本开始官方优化了Windows平台下PowerShell环境的参数接收适配,原生支持
npm run index -- -a -b -c的写法。
内容的提问来源于stack exchange,提问作者Michael Morris
相关产品推荐
相关产品推荐

