将参数传递给npm脚本的中间

时间:2016-06-16 21:39:42

标签: npm

标题说明了一切。我希望能够将参数传递到npm脚本的中间,以便我可以执行以下操作。

$ npm run deploy -- <destination-path>

在package.json

"scripts": {
    "deploy": "robocopy dist <destination-path> /E /NP"
 }

如果不使用环境变量或npm的配置变量,这是否可行?

4 个答案:

答案 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