有没有办法在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
答案 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