包的脚本部分。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)。这可能吗?
当前回答
适用于Windows系统下的PowerShell用户
接受的答案不为我的npm 6.14工作。无论是添加“不”还是包含“一次”都不起作用。但是,在实参前面放两次——或者放一次“——”就可以了。例子:
npm run <my_script> -- -- <my arguments like --this>
怀疑的理由
像在bash中一样,——指示PowerShell将以下所有参数视为字面字符串,而不是选项(例如,请看这个答案)。问题似乎是该命令比预期的多解释了一次,丢失了“——”。例如,通过做
npm run <my_script> -- --option value
NPM将运行
<my_script> value
然而,做
npm run <my_script> "--" --option value
结果
<my_script> "--option" "value"
这很好。
其他回答
你也可以这样做:
在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
使用过程。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中测试
适用于Windows系统下的PowerShell用户
接受的答案不为我的npm 6.14工作。无论是添加“不”还是包含“一次”都不起作用。但是,在实参前面放两次——或者放一次“——”就可以了。例子:
npm run <my_script> -- -- <my arguments like --this>
怀疑的理由
像在bash中一样,——指示PowerShell将以下所有参数视为字面字符串,而不是选项(例如,请看这个答案)。问题似乎是该命令比预期的多解释了一次,丢失了“——”。例如,通过做
npm run <my_script> -- --option value
NPM将运行
<my_script> value
然而,做
npm run <my_script> "--" --option value
结果
<my_script> "--option" "value"
这很好。
我发现这是可能的,只是传递变量完全像你会给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”
当我需要部署到不同的环境时,我也遇到了同样的问题 这是包裹。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