包的脚本部分。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)。这可能吗?
当前回答
这并没有真正回答你的问题,但你总是可以使用环境变量来代替:
"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
当我需要部署到不同的环境时,我也遇到了同样的问题 这是包裹。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
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:
// index.js
console.log(process.env.TEST_ENV_VAR)
// package.json
...
"scripts": { "start": "node index.js" },
...
TEST_ENV_VAR=hello npm start
打印出“hello”