包的脚本部分。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)。这可能吗?
当前回答
从npm 2开始。X,你可以通过——分隔参数传递到运行脚本
终端
npm run-script start -- --foo=3
Package.json
"start": "node ./index.js"
Index.js
console.log('process.argv', process.argv);
其他回答
这并没有真正回答你的问题,但你总是可以使用环境变量来代替:
"scripts": {
"start": "PORT=3000 node server.js"
}
然后在你的server.js文件中:
var port = process.env.PORT || 3000;
使用过程。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中测试
jakub。G的答案是正确的,但是使用grunt的例子似乎有点复杂。
所以我的简单回答是:
-向npm脚本发送命令行参数
发送命令行参数到npm脚本的语法:
npm run [command] [-- <args>]
假设我们的包中有一个npm start任务。Json启动webpack开发服务器:
"scripts": {
"start": "webpack-dev-server --port 5000"
},
我们用npm start从命令行运行它
现在,如果我们想把一个端口传递给npm脚本:
"scripts": {
"start": "webpack-dev-server --port process.env.port || 8080"
},
运行该命令并通过命令行传递端口,例如5000,如下所示:
npm start --port:5000
-使用包。json配置:
正如jakub提到的。G,你也可以在package.json的配置中设置参数
"config": {
"myPort": "5000"
}
"scripts": {
"start": "webpack-dev-server --port process.env.npm_package_config_myPort || 8080"
},
NPM start将使用配置中指定的端口,或者你也可以覆盖它
npm config set myPackage:myPort 3000
-在npm脚本中设置参数
读取npm脚本中设置的变量的例子。在本例中NODE_ENV
"scripts": {
"start:prod": "NODE_ENV=prod node server.js",
"start:dev": "NODE_ENV=dev node server.js"
},
通过prod或dev读取server.js中的NODE_ENV
var env = process.env.NODE_ENV || 'prod'
if(env === 'dev'){
var app = require("./serverDev.js");
} else {
var app = require("./serverProd.js");
}
我过去一直在使用这个一行程序,在离开Node.js一段时间后,最近不得不尝试重新发现它。类似于@francoisrv提到的解决方案,它利用了npm_config_*变量。
创建以下最小包。json文件:
{
"name": "argument",
"version": "1.0.0",
"scripts": {
"argument": "echo \"The value of --foo is '${npm_config_foo}'\""
}
}
执行如下命令:
npm run argument --foo=bar
观察以下输出:
foo的值是'bar'
所有这些都在npm官方文档中有很好的记录:
https://docs.npmjs.com/using-npm/config
注意:“环境变量”标题解释了脚本中的变量与文档中定义的变量的行为不同。当涉及到大小写敏感性时,这是正确的,以及参数是否定义为空格或等号。
注意:如果使用带有连字符的参数,这些参数将在相应的环境变量中替换为下划线。例如,npm运行示例——foo-bar=baz对应于${npm_config_foo_bar}。
注意:对于非wsl Windows用户,请参阅下面@Doctor Blue的评论…将${npm_config_foo}替换为%npm_config_foo%。
你要求能够运行像npm start 8080这样的程序。这是可能的,而不需要修改script.js或配置文件如下。
例如,在你的“脚本”JSON值中,包括——
"start": "node ./script.js server $PORT"
然后在命令行中:
$ PORT=8080 npm start
我已经确认这是使用bash和npm 1.4.23工作。注意,这个解决方案不需要解决GitHub npm问题#3494。