关于node.js:将参数传递给package.json中的npm脚本

Passing arguments to npm script in package.json

本问题已经有最佳答案,请猛点这里访问。

是否有方法在package.json命令中传递参数?

我的剧本:

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

cli-npm run test 8080 production

那么关于mytest.js,我想和process.argv讨论一下。


向脚本传递参数

为了向NPM脚本传递参数,为了安全起见,应该在--之后提供这些参数。

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

1
2
npm run test -- 8080 production
npm run test 8080 production

但当参数包含选项(如-p时,--是必要的,否则npm将分析它们并将其视为npm的选项。

1
npm run test -- 8080 -p

使用位置参数

这些参数只是附加到要运行的脚本中。你的$1$2不会解决。NPM实际运行的命令是:

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

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

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

或者使用工具脚本,将脚本放到单个文件中。

包装:JSON:

1
2
3
"scripts": {
 "test":"scripty"
}

脚本/测试:

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