包的脚本部分。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
这并没有真正回答你的问题,但你总是可以使用环境变量来代替:
"scripts": {
"start": "PORT=3000 node server.js"
}
然后在你的server.js文件中:
var port = process.env.PORT || 3000;
从npm 2开始。X,你可以通过——分隔参数传递到运行脚本
终端
npm run-script start -- --foo=3
Package.json
"start": "node ./index.js"
Index.js
console.log('process.argv', process.argv);
试试跨环境的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
我发现这个问题,当我试图解决我的问题运行sequelize seed:generate cli命令:
node_modules/.bin/sequelize seed:generate --name=user
让我言归正传。我想在我的包中有一个简短的脚本命令。Json文件,并同时提供——name参数
经过一些实验,我们找到了答案。这是我在package.json中的命令
"scripts: {
"seed:generate":"NODE_ENV=development node_modules/.bin/sequelize seed:generate"
}
... 下面是一个在终端中运行它为用户生成种子文件的例子
> yarn seed:generate --name=user
> npm run seed:generate -- --name=user
FYI
yarn -v
1.6.0
npm -v
5.6.0