我使用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的方式工作。
答案 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。