为什么 npm 将命令行标志直接传递到我的脚本?
Why is npm passing cmd line flags directly to my script?
我正在使用 npm 运行 构建,我正在尝试使用 cmd 行标志覆盖我的 .npmrc 配置选项。但是 npm 坚持将这些标志直接传递到我的脚本,而不是像文档中描述的那样将它们作为配置选项读取。我做错了什么?
从 cmd 行我尝试像这样构建一个 Tizen 包:
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 上以这种方式工作。
您可以尝试在 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
我想通了!
文档有缺陷,因为它没有告诉您传递 npm 配置属性的正确语法。我必须使用:
npm run package --mypackagename:tizen_profile="myprofile"
其中 mypackagename 是在 package.json 中使用的名称 属性。另请注意,键值语法是 --key=value
而不是文档中描述的 --key value
。同样,--key
将是 packagename:key 使用在 package.json
.
的顶层指定的名称
我正在使用 npm 运行 构建,我正在尝试使用 cmd 行标志覆盖我的 .npmrc 配置选项。但是 npm 坚持将这些标志直接传递到我的脚本,而不是像文档中描述的那样将它们作为配置选项读取。我做错了什么?
从 cmd 行我尝试像这样构建一个 Tizen 包:
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 上以这种方式工作。
您可以尝试在 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
我想通了!
文档有缺陷,因为它没有告诉您传递 npm 配置属性的正确语法。我必须使用:
npm run package --mypackagename:tizen_profile="myprofile"
其中 mypackagename 是在 package.json 中使用的名称 属性。另请注意,键值语法是 --key=value
而不是文档中描述的 --key value
。同样,--key
将是 packagename:key 使用在 package.json
.