我目前正在开发一个Node.js项目,并希望自动设置环境变量。我写了一个类似这样的脚本(set_env.ps1
):
Write-Host "Setting environment variables...";
$env:CLIENT_KEY="xxxxxxxxxxxxxxxx";
$env:CLIENT_SECRET="xxxxxxxxxxxxx";
[etc]
我从一些npm脚本中调用它:
"scripts": {
"install:windows": "powershell ./set_env.ps1",
"start": "npm run install:windows && node index",
"monitor": "npm run install:windows && nodemon index"
},
它似乎不起作用。我可以在命令行中手动输入相同的命令,一次一个,并设置环境变量。但是,只需运行脚本,“设置环境变量...”就会打印到powershell提示符,但不会设置变量。
互联网上的所有内容似乎都希望从提示符中做到这一点,一次一个env var。对于一长串环境变量,这非常繁琐,Webstorm中的嵌入式Powershell提示习惯于不接受粘贴的字符串。
答案 0 :(得分:1)
回答这个问题,因为很可能其他人会遇到这个问题。
正如两条评论所指出的,Powershell脚本进程的环境在终止时会丢失。因此,脚本内设置的环境变量不会传递给Powershell提示符。
我们可以从powershell脚本调用npm run monitor
或npm run start
,而不是链接npm脚本来调用我们需要的所有内容,而不是:
Write-Host "Setting environment variables...";
$env:CLIENT_KEY="xxxxxxxxxxxxxxxxx";
$env:CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxx";
[etc]
[...]
Write-Host "Initializing process..."
npm run monitor
然后,我们有这样的npm脚本:
"scripts": {
"start:windows": "powershell ./start.ps1",
"start": "node index",
"monitor": "nodemon index"
}
要启动,请从命令提示符运行npm run start:windows
。