WindowsでNODE_ENV = productionを設定するにはどうすればよいですか?


340

Ubuntuではそれは非常に簡単です。以下を使用してアプリケーションを実行できます。

$ NODE_ENV=production node myapp/app.js

ただし、これはWindowsでは機能しません。属性を設定できる構成ファイルはありますか?


マルチプラットフォームソリューションについては、stackoverflow.com
a / 57509175/11127383の

回答:


485

Windowsの現在のバージョンでは、Powershellをデフォルトのシェルとして使用しているため、以下を使用します。

$env:NODE_ENV="production"

以下の@jsalonenの回答ごとに。CMD(メンテナンスされなくなった)の場合は、

set NODE_ENV=production

これは、Node.jsアプリケーションを実行する予定のコマンドプロンプトで実行する必要があります。

上記の行は、コマンドを実行するコマンドプロンプトの環境変数NODE_ENVを設定します。

環境変数をグローバルに設定して、単一のコマンドプロンプトを超えて持続するようにするには、コントロールパネルの[システム]から(または、スタートメニューの検索ボックスに「環境」と入力して)ツールを見つけます。


112
まだこれで苦労している人のために:set NODE_ENV=production && node app。より適切に構成してくださいpackage.json"scripts": { "start": "set NODE_ENV=production && node app" }
アンバーランプ2014年

5
@ShuruiLiuコマンドは何も出力しませんが、入力echo %NODE_ENV%して現在の値を確認できます。
Jani Hartikainen 2015

169
見出し:「set NODE_ENV = production &&」は、変数に末尾のスペースを追加します。Ghostのようなノードアプリを壊す追加のスペースを避けるために、「set NODE_ENV = production &&」が必要でした。
DAW

12
@Amberlampsこれは、NODE_ENVがすべてのマシンに対してハードコードされているだけなので、良い解決策ではありません。実際の目標は、env変数を使用してマシンによってenvを変更するか、package.jsonファイルにハードコードするのではなく、コマンドラインで値を渡すことです。
Alexander Mills

6
cross-envあなたのチームが混合オペレーティングシステムで作業している場合、この問題のより良い解決策は使用することです。@MoOxからの回答が、この質問への回答としての私の選択です。
philk 2016年

229

独自の構文であるクロスプラットフォームを使用して環境変数を定義するのに役立つ、優れたNode.jsパッケージを見つけました。

https://www.npmjs.com/package/cross-env

それはあなたがこのようなものを書くことを可能にします:

cross-env NODE_ENV=production my-command

かなり便利です!WindowsやUnix固有のコマンドはもうありません!


25
最初の答えは本当ですが。私はこの回答が最も信頼性が高く、使用する必要があると思います
d4rklit3

これは素晴らしいソリューションです!
Kirill Gusyatin 2017年

シンプルで完全に私の問題を解決します。Linuxでのみビルドできました。これにより、LinuxとWindowsの両方が解決されました。
tista3

この答えはもっと愛に値するものであり、受け入れられるべきものです:)
Honza Kalfus

これも私にとって最良の答えです
knaos

166

PowerShellの場合:

$env:NODE_ENV="production"

4
PS:$と引用符を忘れないでください;)
George

6
set NODE_ENV=productionpowershellでは私にとってはうまくいきませんでしたが、これはうまくいきました。ありがとう!
2017

6
これをVisual Studio Code内のPowershellから機能させるには少し苦労しました。ここに解決策を残しておくと思いました。正しいenv値が設定されていることを確認しながら、「Gulp」コマンドを実行しようとしました。これは私のために働いてきたものです:$env:NODE_ENV="development"; gulp runMytask。セミコロンに注意してください。gulpファイルは、process.env.NODE_ENVで条件付きロジックを使用できます。設定しない限り、未定義になります。
dvsoukup 2017

2
窓10とのWebPACK 3.8.1と私のためのこのソリューションの作業のみ
РоманАрсеньев

1
これは完璧に動作します。ただし、cross-env NODE_ENV=productionenv。の設定が必要なpackage.jsonからnpmコマンドを実行する場合、このオプションは本当に優れたソリューションです。$ env:NODE_ENVオプションを使用した後、envをdev / prodに設定したままにするのは簡単すぎます
Drenai

105

WindowsでNode.jsを起動する呼び出しと同じ行にパラメーターを設定できれば理想的です。以下を注意深く見て、記載されているとおりに実行してください。

次の2つのオプションがあります。

  1. コマンドラインで:

    set NODE_ENV=production&&npm start

    または

    set NODE_ENV=production&&node index.js
  2. Windowsで機能するための秘訣は、「&&」の前後の空白を削除する必要があることです。以下のstart_windows(以下を参照)でpackage.jsonファイルを構成しました。次に、コマンドラインで「npm run start_windows」を実行します。

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }

1
DEFは、このように機能させる方法を知りたいと思います。
SC_Chupacabra

2
私のために働いた。"set NODE_ENV = production && nodemon server.js"
SC_Chupacabra

2
上記の答えを試す前にここまで読んでおけば、時間を節約できただろう。:\
Jeff

1
漠然と関連するメモで、複数のコマンドをチェーンすると、&&がウィンドウで期待どおりに機能しないことがわかりました。疑問がある場合は、| 代わりに
Mike

1
これは、cmdとpower-shellの両方からWindows 10 64ビットマシンで動作しました
Ani

30

使用できます

npm run env NODE_ENV=production

WindowsとUnixの両方で互換性があるため、おそらくこれが最良の方法です。

NPMの実行スクリプトのドキュメント

envスクリプトは特別な組み込みコマンドで、実行時にスクリプトで使用できる環境変数をリストするために使用できます。「env」コマンドがパッケージで定義されている場合、組み込みコマンドよりも優先されます。


3
変数を設定して別のコマンドを実行するにはどうすればよいですか?これは機能していないようです:npm run env NODE_ENV = production && echo $ NODE_ENV。おそらくそれらは2つの異なるシェルで実行されますか?
Jonas Kello、2015年

1
私が見ることができることから、これはまったく機能しません。ドキュメント自体から、それは環境変数をリストするだけであり、設定しません。
kumarharsh

2
私にはうまくいきません。...それはリストには、指定したVARを表示するvarsのが、実行時に、varがprocess.env.YOUR_VARでOKではありません
MoOx

3
@JonasKelloあなたはこれを使用します。ある必須。必要なコマンドに置き換えます。npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--node -e 'console.log(process.env.NODE_ENV)'
Pauan

このコマンドでこれを試してみました:npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js...何も起こりませんでした。この方法がWindowsで機能するかどうかはわかりません。
jcollum 2017

14

NTVSでVisual Studioを使用している場合は、プロジェクトのプロパティページで環境変数を設定できます。

Visual Studio NTVSプロジェクトプロパティ

ご覧のとおり、[構成]および[プラットフォーム]ドロップダウンは無効になっています(なぜそうなのか詳しく調べていません)が、.njsproj次のようにファイルを編集すると、

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

[デバッグ/リリース]ドロップダウンは、Node.jsを開始する前に変数の設定方法を制御します。


12

* nixと同じようにコマンドを実行できるwin-node-envモジュールを作成しました

NODE_ENV=production node myapp/app.js

環境変数NODE_ENV.cmdを設定NODE_ENVし、残りのコマンドとその引数を使用して子プロセスを生成するを作成することで機能します。

それを(グローバルに)インストールし、npmスクリプトコマンドを実行するだけで、自動的に機能します。

npm install -g win-node-env

まさに私が探していたもの!npmスクリプトで実行し、jestなどの他のノードcliツールでも動作します。「set NODE_ENV = debug&cls&jest ...」は「cls&NODE_ENV = debug jest」になった
Z. Khullah

9

Visual Studio 2013のWindows 7 64ビットでNode.jsを使用した私の経験では、

setx NODE_ENV development

cmdウィンドウから。また、新しい値が認識されるようにするには、Visual Studioを再起動する必要があります。

set構文は、それが設定されているcmdウィンドウの間だけ持続します。

Node.jsでの簡単なテスト:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

setを使用すると「undefined」を返し、setxを使用してVisual Studioを再起動すると「development」を返します。


cmd-powershellではありませんか?ああ、窓に来て、一緒にそれを取得します。
jcollum 2017

VSコードの再起動に関するあなたの発言は本当に役に立ちました!
Yury Kozlov

8

次にコマンドライン以外の方法を示します。

Windows 7または10では、スタートメニューの検索ボックスに「環境」と入力し、[システム環境変数の編集]を選択します。

または、コントロールパネル\システムとセキュリティ\システムに移動して、システムの詳細設定をクリックします。

これにより、[詳細設定]タブが選択された状態で[システムのプロパティ]ダイアログボックスが開きます。下部に、[環境変数...]ボタンが表示されます。こちらをクリックしてください。

システムダイアログボックス

[環境変数]ダイアログボックスが開きます。

[環境変数]ダイアログボックス

下部の[システム環境変数]で、[新規...]を選択します。これにより、[新しいシステム変数]ダイアログボックスが開きます。

ここに画像の説明を入力してください

変数名と値を入力して、「OK」をクリックします。

新しい変数をprocess.envで使用できるようにするには、すべてのcmdプロンプトを閉じてサーバーを再起動する必要があります。それでも表示されない場合は、マシンを再起動してください。


2
ありがとうございました!これをすべて実行しましたが、サーバーを再起動するまで機能しませんでした。
Marcel Lamothe

7

ただ明確にするために、そして彼らの髪を引っ張っているかもしれない誰かのために...

Windowsgit bashを使用している場合は、set node_env=production&& node whatever.js 動作しないようです。代わりに、ネイティブcmdを使用してください。次に、set node_env=production&& node whatever.js期待どおりに動作します。

私のユースケース:

私はWindowsで開発しています。ワークフローがはるかに速いためですが、アプリケーションの開発固有のミドルウェアが本番環境で起動されないことを確認する必要がありました。


6

PowerShellでアプリケーションを実行するに&&は(許可されていないため):

($env:NODE_ENV="production") -and (node myapp/app.js)

サーバーの動作のテキスト出力が抑制されていることに注意してください。これが修正可能かどうかはわかりません。(@jsalonenの答えを拡張しています。)


それは私にはうまく"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
いき

4

最初のPowershellタイプ

$env:NODE_ENV="production"

次に入力

node fileName.js

それはすべての出力を表示して完全に動作します。


2

以下のために、複数の環境変数、.envファイルの方が便利です。

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

で簡単に使えますdotenv-safe

  1. でインストールしnpm install --save dotenv-safeます。
  2. これをコードに含め(の最初で最適index.js)、process.env次のコマンドで直接使用します。
require('dotenv').load()
console.log(process.env.DB_HOST)   

VCS内.envファイル無視することを忘れないでください

次に、「で定義された」.env.example変数が環境変数またはで設定されていない場合、プログラムは高速に失敗し.envます。



@coiso一般的な共通の場所がない場合、どこに多くの環境変数を配置しますか?スクリプトファイルまたはIDEに依存する設定のいずれかで、特定のツールにさらにバインドされます。これにより、新しいチームメンバーの統合がさらに難しくなると思います。
ドミニク2018

2

GITBASH端末"set NODE_ENV=production" を使用している場合は機能し ません、あなたができることはタイプ「エクスポート」ですNODE_ENV=production"


0

これは変数を設定しませんが、多くの場合に役立ちます。これをプロダクションに使用することはお勧めしませんが、npmで遊んでいる場合は問題ありません。

npm install --production

0

「&&」なしでgulpタスクを実行するためにnpmスクリプトを使用しました

NODE_ENV = testcases npm run seed-db


0

NODE_ENVまたはその他の環境変数が正しい値を提供していない場合は、VSコードを再起動します。これは再起動後に機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.