OS XでNODE_ENVを本番/開発に設定する方法


回答:


663

アプリを実行する前に、コンソールでこれを実行できます。

export NODE_ENV=production

または、Windowsを使用している場合は、これを試すことができます。

SET NODE_ENV=production

または、次のようにアプリを実行できます。

NODE_ENV=production node app.js

jsファイルで設定することもできます:

process.env.NODE_ENV = 'production';

ただし、サーバーでVIMを開いて本番環境に変更するのは簡単ではないため、ランタイムファイルで行うことはお勧めしません。ディレクトリにconfig.jsonファイルを作成すると、アプリが実行されるたびに、そのファイルが読み取られ、構成が設定されます。


12
これは悪いアドバイスです。process.env.NODE_ENVアプリ自体から確実に設定するのは難しいでしょう。Danielが以下にリンクするように、環境変数を適切に設定することをお勧めします。
MK Safi 2013

15
NODE_ENV2番目の例(NODE_ENV=production node app.js)のように、アプリを実行するたびに明示的に設定するのが好きです。そうすれば、ローカルをにNODE_ENV戻すのを忘れた場合に、将来の髪の引っ張りから自分を救う可能性がありますdevelopment
Jon

それほど素晴らしいことではありません。アプリを実行するたびに、その環境変数を追加する必要があります。それは最悪です。以下のより良いソリューションを投稿しました。
Lukas Liesis、2016年

2
シンプルなクロスプラットフォームソリューションについては、npmjs.com / package / cross- envを参照してください。cross-env NODE_ENV=productionWindowsおよびLinux / Macで動作します。
AntonB 2016年

1
@Gleb NODE_ENV=production forever app.jsは動作するはずです。
Farid Nouri Neshat 2017

102

package.json:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

次にターミナルで実行します:

npm start

1
大量のスクリプトをpackage.jsonに配置しないでください。不整合が生じ、プロジェクトの不変性が失われるため、これは悪い習慣です。多くの人がうなり声やむしゃむしゃを実行するためのスクリプトを作成しますが、そうしないことを知っています
PositiveGuy

38
@WeDoTDD何言ってるの?これらのスクリプトは、makefileの動作と同様に使用することを目的としています。この例として、またはgulpを実行するために言及したようにそれを使用することは、完全に合理的なユースケースです。単純なタスクの場合、今ではgulpも使用せず、すべてスクリプト内で実行します。物事を動作させる方がはるかに高速であり、gulpによって行われていた作業をwebpackに任せることができます。
MarkoGrešak15年

15
@WTF-package.jsonでスクリプトを使用することが「悪い習慣」だとはどういう意味ですか?それがスクリプトのポイントです。スクリプトを配置するセクションです。その完全に有効であり、一口やうなり声の必要性を排除します。すべてコマンドとウェブパックを介して行われます。
TetraDev 2016年

6
@WTFスクリプトを使用すると、実際に一貫性が大幅に向上します。同じ基礎となるビルドスクリプト、ライブラリなどを使用しない可能性がある複数のプロジェクトで使用される標準のコマンドセットを設定できます。少なくとも、事実と例で要点を裏付けることができます。
ルイスダイヤモンド

4
NODE_ENV=productionpackage.jsonを入れても意味がありません。実行npm start開発では、生産にそれを実行します。常にそのように実行するため、コードは常に本番環境であるかのように書くことができます。私がこれを実行する理由の1つは、他のモジュール(例:Express)を強制的にプロダクションモードで実行するためです。環境変数が変更されないのに、なぜ環境変数を使用するのですか?
Nateowami 2017年

65

.envここでまだ誰も言及していませんか?確認し.envた後、アプリのルートにファイルをrequire('dotenv').config()して値を読み取ります。簡単に変更でき、読みやすく、クロスプラットフォーム。

https://www.npmjs.com/package/dotenv


1
奇妙なことに誰も言及していない、私の意見では最良の解決策です。環境名を残りの変数と同じファイルに入れます。
Asinus Rex 2018

2
.envファイルでNODE_ENVを設定しても機能しません。これを参照してください:github.com/motdotla/dotenv/issues/328
Michael Zelensky

私にとって"mode": "production".envファイルの設定はうまくいきました。
DarkLite1

46

export NODE_ENV=production 悪い解決策です、再起動後に消えます。

その変数についてもう心配しない場合は、このファイルに追加します。

/etc/environment

エクスポート構文を使用せず、次のように記述します(すでにコンテンツがそこにある場合は新しい行に):

NODE_ENV=production

再起動後に機能します。export NODE_ENV = productionコマンドを再入力する必要がなくなり、ノードを好きなもので使用するだけです-永久に、pm2 ...

herokuの場合:

heroku config:set NODE_ENV="production"

これは実際にはデフォルトです。


2
メンテナンスの悪夢。/ etcへのアクセス権がないボックスについてはどうですか?
トーマス・マッケイブ2016年

1
私は個人的にNODE_ENV=production gulp bundle-production-app本番環境対応のスクリプトをバンドルするために使用しています。サーバーのNODE_ENVはサーバーの環境にあり、開発マシンにはありません。一部のマシンでは、設定されておらず、常に設定されていることを期待していると悪夢になります。いくつかは、それを持たないことを期待しているので、追加しません。とにかく、UIを実行しているときに、開発モードかどうかを明確にします。そのため、オンかオフかについて質問されることはありません。NODE_ENVが!==プロダクションの場合、他のモードにいるのはあなたの目の前なので、悪夢はまったくありません。すべてクリア、すべて良い。
Lukas Liesis 16

持続させる方法について話すための+1。それが存続すると考えて、現在のセッションでのみ何人が設定したのでしょうか。再起動はどうですか?すぐに設定したい場合は、入れて実行する必要が/etc/environment ありますexport NODE_ENV=productionか?
Nateowami 2017年

24

スクリプトをWindows、Mac、またはLinuxのどちらで実行するかを心配する必要がないようにするには、cross-envパッケージをインストールします。その後、次のようにスクリプトを簡単に使用できます。

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

このパッケージの開発者への大規模な小道具。

npm install --save-dev cross-env



6

OSXではexport NODE_ENV=development~/.bash_profileandおよび/または~/.bashrcand / orに追加することをお勧めします~/.profile

個人的に私は私にそのエントリを追加~/.bashrcして、持っている~/.bash_profile ~/.profile、それが環境全体で一貫ですので、インポートにそのファイルの内容を。

これらの追加を行った後、必ずターミナルを再起動して設定を取得してください。


2

Windowsを使用している場合。正しいフォルダでcmdを開いてから、最初に

set node_env={your env name here}

Enterキーを押すと、ノードを開始できます

node app.js

それはあなたの環境設定で始まります


1
再起動後に消えませんか?窓がないので、自分で試すことはできません。
Lukas Liesis

ノードの再起動について質問している場合は、コマンドプロンプトを完全に閉じるまでノードは消えません。ただし、Windows Serverを再起動すると消えます。
garenyondem

2
OSの再起動について話します。そのため、Windowsの更新プログラムがインストールされるたび、または単に再起動するたびに、この問題について何度も不思議に思うのをやめる別の方法を見つけた方がよいでしょう。
Lukas Liesis

2

アプリケーションでwebpackを使用している場合は、単純にそこに設定できDefinePluginます。

したがって、pluginセクションでNODE_ENVproduction次のように設定します。

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

1

複数の環境を用意するには、以前にすべての答えが必要です(NODE_ENVパラメーターとエクスポート)。しかし、私は何もインストールする必要がない非常に単純なアプローチを使用しています。package.jsonに、次のように、必要な環境ごとにスクリプトを追加するだけです。

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

次に、npm startuse を使用する代わりにアプリを起動しますnpm run script-prod

コードでは、を使用して現在の環境にアクセスできますprocess.env.NODE_ENV

出来上がり。


NODE_ENVは「開発」または「プロダクション」のいずれかである必要があります。上記はサードパーティのコードでは認識されません(ただし、process.envで確認できます)
John Culviner



0

sequelizeオブジェクトの2つのインスタンスを作成した可能性があります

例:var con1 = new Sequelize(); var con2 = new Sequelize();

同じエラーが発生するよりも

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