包的脚本部分。Json当前看起来是这样的:
"scripts": {
"start": "node ./script.js server"
}
...这意味着我可以运行npm start来启动服务器。到目前为止一切顺利。
然而,我希望能够运行类似npm start 8080的东西,并将参数传递给script.js(例如npm start 8080 => node ./script.js服务器8080)。这可能吗?
包的脚本部分。Json当前看起来是这样的:
"scripts": {
"start": "node ./script.js server"
}
...这意味着我可以运行npm start来启动服务器。到目前为止一切顺利。
然而,我希望能够运行类似npm start 8080的东西,并将参数传递给script.js(例如npm start 8080 => node ./script.js服务器8080)。这可能吗?
当前回答
使用过程。Argv在你的代码中,然后只提供一个尾随$*到你的脚本值项。
作为一个例子,尝试用一个简单的脚本,只记录提供的参数到标准的echoargs.js:
console.log('arguments: ' + process.argv.slice(2));
package.json:
"scripts": {
"start": "node echoargs.js $*"
}
例子:
> npm start 1 2 3
arguments: 1,2,3
的过程。[0]是可执行(节点)进程。Argv[1]是你的脚本。
在npm v5.3.0和node v8.4.0中测试
其他回答
这并没有真正回答你的问题,但你总是可以使用环境变量来代替:
"scripts": {
"start": "PORT=3000 node server.js"
}
然后在你的server.js文件中:
var port = process.env.PORT || 3000;
你也可以这样做:
在package.json:
"scripts": {
"cool": "./cool.js"
}
在cool.js:
console.log({ myVar: process.env.npm_config_myVar });
在CLI:
npm --myVar=something run-script cool
应该输出:
{ myVar: 'something' }
更新:在使用npm 3.10.3时,它看起来降低了process.env的大小写。npm_config_变量?我还使用了better-npm-run,所以我不确定这是否是普通的默认行为,但这个答案是有效的。而不是process.env。npm_config_myVar,尝试process.env.npm_config_myvar
试试跨环境的NPM包。
使用方便。安装方便。跨所有平台。
例子:
为命令设置参数
// package.json
"scripts": {
“test”: “node test.js”,
“test-with-env-arg”: “cross-env YourEnvVarName=strValue yarn test,
}
从process.env中获取参数
// test.js
const getCommandLineArg = Boolean(process.env.YourEnvVarName === 'true') // Attention: value of process.env.* is String type, not number || boolean
我满足于这样的东西,看看测试观察脚本:
"scripts": {
"dev": "tsc-watch --onSuccess \"node ./dist/server.js\"",
"test": "tsc && cross-env NODE_OPTIONS=--experimental-vm-modules NODE_NO_WARNINGS=1 jest",
"test-watch": "cross-env NODE_OPTIONS=--experimental-vm-modules NODE_NO_WARNINGS=1 tsc-watch --onSuccess",
},
你像这样调用test-watch脚本:
// Run all tests with odata in their name
npm run test-watch "jest odata"
上面的大多数答案都只是将参数传递到你的NodeJS脚本中,由npm调用。我的解决办法是通用的。
只需要用shell解释器(例如sh)调用包装npm脚本,并像往常一样传递参数。唯一的例外是第一个参数编号为0。
例如,你想添加npm脚本someprogram——env=<argument_1>,其中someprogram只打印env参数的值:
package.json
"scripts": {
"command": "sh -c 'someprogram --env=$0'"
}
当你运行它时:
% npm run -s command my-environment
my-environment