从.ps1脚本设置环境变量



我目前正在从事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提示符,但没有设置变量。

Internet上的所有内容似乎都想从提示中执行此操作,一次是一个env var。这非常乏味,有一长串的环境变量,并且嵌入式的powershell提示在webstorm中有一个习惯不接受粘贴的字符串。

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

正如两个评论所指出的那样,powershell脚本过程的环境在终止时会丢失。因此,脚本内部设置的环境变量不会传递给PowerShell提示。

而不是链接NPM脚本来调用我们需要的一切,而是可以从PowerShell脚本中调用npm run monitornpm run start,例如:

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

最新更新