标题说明了一切。我希望能够将参数传递到npm脚本的中间,以便我可以执行以下操作。
$ npm run deploy -- <destination-path>
在package.json
中"scripts": {
"deploy": "robocopy dist <destination-path> /E /NP"
}
如果不使用环境变量或npm的配置变量,这是否可行?
答案 0 :(得分:7)
每Passing args into run-scripts #5518看起来不可能将参数传递到脚本的中间。
对不起,我们不会支持将args传递到脚本中间。如果您真的需要这个,请使用任何人使用的任何命令行解析器编写测试命令。 (Minimist,dashdash,nopt和commander都支持这个很好。)
然而,使用npm configuration block has been documented here替代此方法。我的实现看起来像这样:
"name": "foo"
"config": { "destination" : "deploy" },
"scripts": { "deploy": "robocopy dist %npm_package_config_destination% /E /NP" }
然后我可以在命令行和我的构建服务器上使用:
覆盖它npm run deploy --foo:destination=C:\path\to\deploy\dir
答案 1 :(得分:2)
您可以使用环境变量来设置目标路径。
PATH=/path/to/file npm run deploy -- $PATH
或
export PATH=/path/to/file
npm run deploy -- $PATH
答案 2 :(得分:0)
您可以使用“ sh -c”的arg结构。在下面的示例中,我必须将npm arg回送给语言解析器。 npm run foma <some word>
的参数将代替$0
:
"foma": "sh -c 'echo $0 | ./deps/foma/flookup -i ./deps/hunmorph-foma/hunfnnum.fst'"
答案 3 :(得分:0)
我有另一种通过外壳执行此操作的方法。
如果您的npm命令为:
"deploy": "robocopy dist ${1} /E /NP"
其中$ {1}是要替换的参数。
然后将其包装在一个函数中,如下所示:
"deploy": "func() { robocopy dist ${1} /E /NP";}; func"
然后您可以在shell中运行位置参数替换,如下所示:
npm run deploy -- xyz
可以运行
robocopy dist xyz /E /NP
由于这是一个Shell脚本,因此您也可以使用默认参数:
"deploy": "func() { robocopy dist ${1:-xyz} /E /NP";}; func"
您可以按以下方式使用它:
npm run deploy <==> robocopy dist xyz /E /NP
npm run deploy -- abc <==> robocopy dist abc /E /NP