为什么npm直接将cmd行标志传递给我的脚本?

时间:2018-05-04 17:28:39

标签: npm npm-cli

我使用npm运行构建,并尝试使用cmd行标记覆盖我的.npmrc配置选项。但是,npm坚持将这些标志直接传递给我的脚本,而不是像文档中所描述的那样将它们作为配置选项读取。我做错了什么?

从cmd行我尝试构建一个Tizen pacakge,如下所示:

npm run package --tizen_profile myprofile

在我的package.json中我有:

"package": "tizen package -t wgt --sign $npm_package_config_tizen_profile -- .buildResult/wgt -o .buildResult/wgt"

运行命令的结果是:

package: `tizen package -t wgt --sign $npm_package_config_tizen_profile -- .buildResult/wgt -o .buildResult/wgt "myprofile"`

它应该在哪里:

package: `tizen package -t wgt --sign "myprofile"_tizen_profile -- .buildResult/wgt -o .buildResult/wgt`

就像npm只是将cmd行参数附加到脚本命令而不是像文档中所述的变量一样插入它:https://docs.npmjs.com/misc/config

npm最近有更新,弃用并删除了此功能吗?我刚刚更新到npm 6.x,但它也是以5.x的方式工作。

2 个答案:

答案 0 :(得分:1)

你可以尝试在package.json内重写你的脚本而不用--sign标志:

"package": "tizen package -t wgt -- .buildResult/wgt -o .buildResult/wgt"

然后在运行npm命令时传递它:

npm run package -- --sign myprofile

我假设您可以更改参数的顺序,因为--sign myprofile现在将位于命令的最后

<强>更新

这是另一种传递变量并将它们放在CLI命令中的任何位置的方法(不使用npm config set)。在我的package.json

"aaa": "ls $myoptionalflag && $mycmd"

这样我可以将任何标志传递给la命令(或者根本不传递),我可以将任何CLI命令作为mycmd变量传递。所以,现在我可以运行:

myoptionalflag=-la mycmd=pwd npm run aaa

将执行

ls -la && pwd

mycmd=pwd npm run aaa

将执行

ls && pwd

答案 1 :(得分:1)

我想出来了!

文档存在缺陷,因为它没有告诉您传递npm配置属性的正确语法。我不得不使用:

npm run package --mypackagename:tizen_profile="myprofile"

其中mypackagename是package.json中使用的name属性。另请注意,密钥值语法为--key=value而非--key value,如文档中所述。同样,--key将使用您在package.json顶级指定的名称为packagename:key。