将参数传递给package.json中的npm脚本

时间:2016-02-05 09:56:54

标签: node.js parameters npm arguments

有没有办法在package.json命令中传递参数?

我的剧本:

"scripts": {
  "test": "node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet"
}

cli npm run test 8080 production

然后在mytest.js我希望得到process.argv

的论据

1 个答案:

答案 0 :(得分:37)

将参数传递给脚本

要将参数传递给npm script,您应该在--之后提供这些参数以确保安全。

在您的情况下,--可以省略。它们的行为相同:

npm run test -- 8080 production
npm run test 8080 production

但是当参数包含选项(例如-p)时,--是必需的,否则npm会解析它们并将它们视为npm的选项。

npm run test -- 8080 -p

使用位置参数

参数只是附加到要运行的脚本上。您的$1 $2无法解决。 npm实际运行的命令是:

node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet "8080" "production"

为了使位置变量在npm脚本中起作用,请将命令包装在shell函数中:

"scripts": {
  "test": "run(){ node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet; }; run"
}

或者使用工具scripty并将您的脚本放在单个文件中。

的package.json

"scripts": {
  "test": "scripty"
}

脚本/测试

#!/usr/bin/env sh
node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet