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

为什么npm直接向我的脚本传递cmd行标志?,npm,npm-cli,Npm,Npm Cli,我正在使用npm运行一个构建,并试图使用cmd行标志覆盖我的.npmrc配置选项。然而,npm坚持将这些标志直接传递给我的脚本,而不是像文档中描述的那样将它们作为配置选项读取。我做错了什么 从cmd行中,我尝试构建一个Tizen包,如下所示: npm run package --tizen_profile myprofile 在my package.json中,我有: "package": "tizen package -t wgt --sign $npm_package_config_tiz

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

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

npm run package --tizen_profile myprofile
在my 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行参数附加到脚本命令中,而不是像文档中描述的那样插入变量:


npm最近有没有更新,不推荐并删除此功能?我刚刚更新到npm 6.x,但它在5.x上也是这样工作的。

您可以尝试在
package.json
中重写脚本,而不使用
--签名
标志,如:

"package": "tizen package -t wgt -- .buildResult/wgt -o .buildResult/wgt"
然后在运行npm命令时传递它:

npm run package -- --sign myprofile
我假设您可以更改参数的顺序,因为
--sign myprofile
现在将位于命令的末尾

更新

下面是传递变量并将其放置在CLI命令中任何位置的另一种方法(无需使用
npm config set
)。在my
package.json
中:

"aaa": "ls $myoptionalflag && $mycmd"
这样,我可以将任何标志传递给
la
命令(或者根本不传递),并且可以将任何CLI命令作为
mycmd
变量传递。所以,现在我可以跑步了:

myoptionalflag=-la mycmd=pwd npm run aaa
哪个将执行

ls -la && pwd
ls && pwd

哪个将执行

ls -la && pwd
ls && pwd

您可以尝试在
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
)。在my
package.json
中:

"aaa": "ls $myoptionalflag && $mycmd"
这样,我可以将任何标志传递给
la
命令(或者根本不传递),并且可以将任何CLI命令作为
mycmd
变量传递。所以,现在我可以跑步了:

myoptionalflag=-la mycmd=pwd npm run aaa
哪个将执行

ls -la && pwd
ls && pwd

哪个将执行

ls -la && pwd
ls && pwd
我知道了

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

npm run package --mypackagename:tizen_profile="myprofile"
其中mypackagename是package.json中使用的name属性。另请注意,键值语法是
--key=value
,而不是文档中描述的
--key-value
。同样,
--key
将是packagename:key,使用在您的
包的顶层指定的名称。json

我找到了它

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

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

其中mypackagename是package.json中使用的name属性。另请注意,键值语法是
--key=value
,而不是文档中描述的
--key-value
。同样,
--key
将是packagename:key,使用在
包的顶层指定的名称。json

谢谢,我想到了这一点,这是最后的选择,因为它不能很好地扩展。如果我需要覆盖超过1个标志,我会进入vertbosity。我希望我只是忽略了一些秘密的语法,比如一个额外的“-”或引号之类的东西。LOL环境变量的巧妙使用!我喜欢!再一次,我终于明白了我的痛苦,这仅仅是一个文档问题。他们从来没有提到在设置cmd行时必须使用包名作为变量的一部分。谢谢,我想到了这一点,这是最后的选择,因为它不能很好地扩展。如果我需要覆盖超过1个标志,我会进入vertbosity。我希望我只是忽略了一些秘密的语法,比如一个额外的“-”或引号之类的东西。LOL环境变量的巧妙使用!我喜欢!再一次,我终于明白了我的痛苦,这仅仅是一个文档问题。他们从未提到在cmd行上设置时必须使用包名作为变量的一部分。请在关于传递非npm配置变量的问题中查看我的更新请在关于传递非npm配置变量的问题中查看我的更新