包的脚本部分。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 start 8080这样的程序。这是可能的,而不需要修改script.js或配置文件如下。
例如,在你的“脚本”JSON值中,包括——
"start": "node ./script.js server $PORT"
然后在命令行中:
$ PORT=8080 npm start
我已经确认这是使用bash和npm 1.4.23工作。注意,这个解决方案不需要解决GitHub npm问题#3494。
其他回答
这并没有真正回答你的问题,但你总是可以使用环境变量来代替:
"scripts": {
"start": "PORT=3000 node server.js"
}
然后在你的server.js文件中:
var port = process.env.PORT || 3000;
基本上这是传递命令行参数的方式,但它只在脚本只有一个命令运行的情况下才会工作,就像我正在运行一个命令,即npm run start——4200
"script":{
"start" : "ng serve --port="
}
这将在传递命令行参数时运行,但如果我们一起运行多个命令,比如npm run build c:/workspace/file
"script":{
"build" : "copy c:/file <arg> && ng build"
}
但是当运行copy c:/file && ng build c:/work space/file时,它会这样解释 我们期待的是这样的事情 复制c:/file c:/work space/file && ng build
注意:-所以命令行参数只能在脚本中只有一个命令的情况下工作。
我读了上面的一些答案,其中一些人写着你可以使用$ symbol访问命令行参数,但这将不起作用
当我需要部署到不同的环境时,我也遇到了同样的问题 这是包裹。Json预发布更新。
scripts:
{"deploy-sit": "sls deploy --config resources-sit.yml",
"deploy-uat": "sls deploy --config resources-uat.yml",
"deploy-dev": "sls deploy --config resources-dev.yml"}
但这里是采用环境变量而不是重复自己的正确方法
scripts:{"deploy-env": "sls deploy --config resources-$ENV_VAR.yml"}
最后,您可以通过运行进行部署 ENV_VAR=dev npm运行deploy-env
我过去一直在使用这个一行程序,在离开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%。
你也可以这样做:
在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