我目前正在从事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 monitor
或npm 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
。