从.ps1脚本设置环境变量
问题描述:
我目前正在研究Node.js项目,并希望自动设置环境变量。我写了一个脚本(set_env.ps1
),看起来是这样的:从.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变量。这对于一长串环境变量来说是非常单调乏味的,Webstorm中嵌入的Powershell提示符有一个不接受粘贴字符串的习惯。
答
回答这个问题是因为可能有人会遇到这个问题。
正如两个注释所示,Powershell脚本进程的环境在终止时丢失。因此,在脚本中设置的环境变量将不会传递到Powershell提示符。
相反链NPM脚本调用我们需要的一切,而不是我们可以称之为npm run monitor
或npm run start
从PowerShell脚本,像这样:
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
。
一般而言,每个派生进程都会继承父环境的副本,该环境在终止产生的进程时会丢失。你必须寻找一种不同的方法来切换变量。 – LotPings
您需要在触发npm命令的过程中设置变量。 –
@Bill_Stewart hehh,那么从命令提示符运行npm时,你不能这么做,因为我在做...但是,你的评论让我思考,并且我意识到:我*可以*运行'npm' Powershell脚本中的命令。即将回答。 –