从.ps1脚本设置环境变量

时间:2017-03-15 21:50:40

标签: powershell npm

我目前正在开发一个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提示习惯于不接受粘贴的字符串。

1 个答案:

答案 0 :(得分:1)

回答这个问题,因为很可能其他人会遇到这个问题。

正如两条评论所指出的,Powershell脚本进程的环境在终止时会丢失。因此,脚本内设置的环境变量不会传递给Powershell提示符。

我们可以从powershell脚本调用npm run monitornpm 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