2017-03-15 17 views
0

現在、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" 
}, 

が動作するようには思えません。コマンドラインで一度に1つずつ、同じコマンドを手動で入力することができ、環境変数が設定されます。しかし、スクリプトを実行するだけで、 "環境変数を設定する..."はPowerShellのプロンプトに表示されますが、変数は設定されません。

インターネット上のすべてのものは、一度に1つのenv varのプロンプトからこれを実行すると思われます。これは、環境変数の長いリストでは非常に面倒であり、Webstormの埋め込まれたPowershellプロンプトには貼り付けられた文字列を受け入れないという習慣があります。

+0

一般に、すべての生成プロセスは、生成されたプロセスを終了するときに失われる親環境のコピーを継承します。 varsをハンドオーバーするための別の方法を探す必要があります。 – LotPings

+0

'npm'コマンドをトリガするプロセス内の変数を設定する必要があります。 –

+0

@Bill_Stewart hehh、コマンドプロンプトからnpmを実行しているときにできることはまったくありませんが、あなたのコメントは私には分かりませんでした。私は「npm」を​​実行できます。コマンドをPowershellスクリプトで実行します。答えは近づく。 –

答えて

0

他の人がこの問題に遭遇する可能性が高いので、この質問に回答してください。

2つのコメントが示されているため、PowerShellスクリプトプロセスの環境は終了時に失われます。したがって、スクリプト内で設定された環境変数はPowershellプロンプトに渡されません。

Write-Host "Setting environment variables..."; 
$env:CLIENT_KEY="xxxxxxxxxxxxxxxxx"; 
$env:CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxx"; 
[etc] 
[...] 
Write-Host "Initializing process..." 

npm run monitor 

はその後、私たちはとても気に入りましNPMスクリプトがある:代わりに私たちは、PowerShellスクリプトからnpm run monitorまたはnpm run startを呼び出すことができますので、などの代わりに、我々は必要なすべてを呼び出すためにNPMスクリプトを連鎖の

"scripts": { 
    "start:windows": "powershell ./start.ps1", 
    "start": "node index", 
    "monitor": "nodemon index" 
} 

開始するには、コマンドプロンプトからnpm run start:windowsを実行します。

関連する問題