Npm 将多个命名参数传递给package.json脚本

Npm 将多个命名参数传递给package.json脚本,npm,webpack,package.json,Npm,Webpack,Package.json,我有一个webpack配置,当前有三个参数,当我以以下方式调用它时,它会起作用: webpack --env.p1 = "p1_value" --env.p2 = "p2_value" --env.p3 = "p3_value" 现在,我想将webpack命令封装在以下package.json脚本中: "scripts": { "prod": "webpack --env.p1 --env.p2 --env.p3" } 如何更改该脚本,以便可以通过以下方式从CLI

我有一个webpack配置,当前有三个参数,当我以以下方式调用它时,它会起作用:

webpack --env.p1 = "p1_value" --env.p2 = "p2_value" --env.p3 = "p3_value" 
现在,我想将webpack命令封装在以下package.json脚本中:

"scripts": {

        "prod": "webpack --env.p1 --env.p2 --env.p3"
    }
如何更改该脚本,以便可以通过以下方式从CLI调用它

npm run prod p1="p1_value" p2="p2_value" p3="p3_value" 

(其中命名参数是必需的,因为我需要能够在webpack配置中使用默认值?

您可以使用占位符
${@:1}
将提供给npm命令的任何参数传递到webpack

package.json

在命令行中,使用
--
作为分隔符添加要传递的参数,如下所示:

npm run prod -- --env.p1="p1_value" --env.p2="p2_value" --env.p3="p3_value" 

我认为您必须将npm脚本参数和CLI命令参数用双破折号分开
--
。示例:
npm run prod--env.p1--env.p2--env.p3
Thank-npm cli是否有较短的版本?我不介意脚本的冗长,反正它是封装的。CLI部分很重要,因为客户端需要定期调用它。那么,有没有一种方法可以像我在原始问题中所问的那样使用npm run prod p1=“p1_value”p2=“p2_value”p3=“p3_value”等?恐怕没有,双破折号是将参数传递给npm的“npm方式”scripts@PatrickHund使用什么npm版本?我试过了&它给了我“糟糕的替代”。我所尝试的就是
“foo”:“echo${@:1}”
然后调用
纱线运行foo bar
。用npm尝试过,也用双破折号
npm run foo--bar
。更新:当使用“foo”:“echo$1”时,它起作用了。知道为什么吗?@HossamEl Deen我刚刚测试过,它适用于节点8.9.4,npm 5.8.0。似乎您可以在
package.json
中省略
${@:1}
位,如果没有它,您可以尝试一下。请确保在
npm run
命令和参数之间使用额外的双破折号作为分隔符。@PatrickHund谢谢。如果删除
{@:1}
,则不会抛出错误。具有相同的节点和npm版本。我不太确信问题在于脚本是由
sh
运行的,而不是
bash
。似乎并非所有shell都支持此语法。例如。,:
npm run prod -- --env.p1="p1_value" --env.p2="p2_value" --env.p3="p3_value"