NODE_ENV'yi OS X'te üretime / geliştirmeye ayarlama


Yanıtlar:


663

Uygulamanızı çalıştırmadan önce bunu konsolda yapabilirsiniz,

export NODE_ENV=production

Veya pencerelerde iseniz bunu deneyebilirsiniz:

SET NODE_ENV=production

veya uygulamanızı şu şekilde çalıştırabilirsiniz:

NODE_ENV=production node app.js

Ayrıca js dosyanızda da ayarlayabilirsiniz:

process.env.NODE_ENV = 'production';

Ancak bunu çalışma zamanı dosyanızda yapmanızı önermiyorum, çünkü sunucunuzda VIM'i açmak ve üretime değiştirmek kolay değildir. Dizininizde bir config.json dosyası oluşturabilirsiniz ve uygulamanız her çalıştığında dosyayı okur ve yapılandırmayı ayarlar.


12
Bu kötü bir tavsiye. process.env.NODE_ENVUygulamanın kendisinden güvenilir bir şekilde zor olacak . En iyi ortam değişkeninizi Daniel'in aşağıda bağlandığı gibi düzgün ayarlayın.
MK Safi

15
NODE_ENVUygulamayı her çalıştırdığınızda, ikinci örnekte olduğu gibi ( NODE_ENV=production node app.js) açık bir şekilde ayarlama hayranıyım . Bu şekilde, yerel ayarlarınızı NODE_ENVgeri almayı unutmanız durumunda kendinizi gelecekteki bazı saç çekme işlemlerinden kurtarırsınız development.
Jon

Hiç de parlak değil. Uygulamanızı her çalıştırdığınızda, bu env var. Bu berbat. Aşağıda daha iyi bir çözüm gönderildi.
Lukas Liesis

2
Basit bir platformlar arası çözüm için npmjs.com/package/cross-env adresine bakın . cross-env NODE_ENV=productionwindows ve linux / mac üzerinde çalışır.
AntonB

1
@Gleb NODE_ENV=production forever app.jsçalışmalı.
Farid Nouri Neshat

102

package.json içinde:

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

sonra terminalde çalıştırın:

npm start

1
package.json içine bir sürü komut dosyası koymaya başlamayın, bu tutarsızlıkları ortaya koyduğunuz için kötü bir uygulamadır ve projelerinizdeki değişmezliği öldürür. Bir çok insan homurdanma veya yutkunmak için komut dosyaları oluşturduğunu biliyorum ama bunu yapmıyorum
PositiveGuy

38
@NeDoTDD neden bahsediyorsun? Bu komut dosyaları, makefile'ın nasıl çalıştığına benzer şekilde kullanılmalıdır. Bu örnek olarak veya gulp çalıştırmak için bahsettiğiniz gibi kullanmak mükemmel bir kullanım durumudur. Basit görevler için artık gulp kullanmıyorum ve hepsini komut dosyasının içinde yapıyorum, işlerin çalışmasını sağlamak çok daha hızlı ve web paketinin eskiden gulp tarafından yapılan işi yapmasına izin veriyorum.
Marko Grešak

15
@WTF - package.json'da komut dosyası kullanmanın "kötü uygulama" ne demek? Komut dosyalarının amacı: bölüm, komut dosyaları koymak! Mükemmel derecede geçerlidir ve yutulma veya homurdanma ihtiyacını ortadan kaldırır. Hepsi komut ve webpack ile yapılır.
TetraDev

6
@WTF Betikleri kullanmak tutarlılığı büyük ölçüde artırır. Aynı temel yapı komut dosyalarını, kütüphaneleri vb. Kullanamayan birden fazla projede kullanılacak standart bir komutlar dizisi ayarlayabilirsiniz.
Lewis Diamond

4
Package.json'u koymak NODE_ENV=productionpek mantıklı değil. Koşu npm startgelişiminde üretimde çalıştırmak olacaktır. Kodunuzu her zaman üretim gibi yazabilirsiniz, çünkü her zaman bu şekilde çalıştırırsınız. Bunu yapmamın bir nedeni, diğer modülleri (örn. Express) üretim modunda çalışmaya zorlamak olacaktır. Neden hiç değişmediyse neden ortam değişkenlerini kullanıyorsunuz?
Nateowami

66

.envBurada henüz kimseden bahsedilmedi mi? .envUygulama kökünüzde bir dosya oluşturun require('dotenv').config()ve değerleri okuyun. Kolayca değiştirilebilir, kolayca okunabilir, çapraz platform.

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


1
Hiç kimse bundan bahsetmiyor, bence en iyi çözüm. Ortam adını değişkenlerin geri kalanıyla aynı dosyaya yerleştirin.
Asinus Rex

2
.Env dosyasında NODE_ENV ayarı çalışmaz. Şuna
Michael Zelensky

Benim "mode": "production"için .envdosyada ayar çalıştı.
DarkLite1

46

export NODE_ENV=production kötü bir çözümdür, yeniden başlattıktan sonra kaybolur.

artık bu değişken hakkında endişelenmek istemiyorsanız - bu dosyaya ekleyin:

/etc/environment

dışa aktarma sözdizimini kullanmayın, sadece yazın (bazı içerikler zaten varsa yeni satırda):

NODE_ENV=production

yeniden başlattıktan sonra çalışır. Artık dışa aktarma NODE_ENV = üretim komutunu tekrar girmek zorunda kalmayacak ve sadece istediğiniz herhangi bir şeyle düğümü kullanmanız gerekmeyecek - sonsuza dek, pm2 ...

Heroku için:

heroku config:set NODE_ENV="production"

Bu aslında varsayılan.


2
Bakım kabusu. / Etc izniniz olmayan bir kutuya ne dersiniz?
Thomas McCabe

1
Ben şahsen NODE_ENV=production gulp bundle-production-appüretim hazır komut dosyası paketlemek için kullanın , sunucu NODE_ENV sunucu ortamında ve dev makinede orada değil. Bazı makinelerde ayarlanmamışsa kabus olur ve her zaman ayarlanmasını beklersiniz . Bazılarında, buna sahip olmamayı beklersiniz, bu yüzden eklemezsiniz. Her neyse, UI'leri yaparken geliştirme modunda olup olmadığını açıklığa kavuşturuyorum, bu yüzden açık veya kapalı olup olmadığını asla sormayacaksınız. Eğer NODE_ENV! == üretim ise, başka bir modda olduğunuz yüzünüzdedir, bu yüzden kabus olmaz. Hepsi açık, hepsi iyi.
Lukas Liesis

Nasıl sürdürebileceği hakkında konuşmak için +1. Acaba kaç kişinin bunu sadece mevcut oturumda devam edeceğini düşünerek ayarladı. Yeniden başlatmadan önce ne olacak ? Eğer hemen ayarlamak istiyorsanız, bunu koymak gerekir /etc/environment ve kaçak export NODE_ENV=production?
Nateowami

24

Komut dosyalarınızı Windows, Mac veya Linux üzerinde çalıştırıp çalıştırmadığınızı düşünmek zorunda kalmamak için çapraz env paketini yükleyin . Sonra komut dosyalarınızı kolayca kullanabilirsiniz, şöyle:

"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"
}

Bu paketin geliştiricilerine büyük destek.

npm install --save-dev cross-env

22
heroku config:set NODE_ENV="production"

2
ahhh buna ihtiyacım vardı. harikasın
Connor Leech

5
NODE_ENV=productionşimdi Heroku node.js dağıtımlarında varsayılan değerdir.
sean

1
heroku konuşlandırılacak tek yer değil
Pavan Katepalli

9

Windows Powershell için bu komutu kullanın

$env:NODE_ENV="production" ; node app.js

6

OSX ben ekleyerek öneririm export NODE_ENV=developmentsenin için ~/.bash_profileve / veya ~/.bashrcve / veya ~/.profile.

Şahsen bu girişi kendime ekliyorum ~/.bashrcve~/.bash_profile ~/.profile o dosyanın içeriğini alma , bu yüzden ortamlar arasında tutarlı.

Bu eklemeleri yaptıktan sonra, ayarları almak için terminalinizi yeniden başlattığınızdan emin olun.


2

Pencerelerde iseniz. Cmd'nizi sağ klasörde açın, önce

set node_env={your env name here}

enter tuşuna basarsanız düğümünüzü

node app.js

env ayarınızla başlayacak


1
yeniden başlattıktan sonra kaybolmayacak mı? Pencereleri yok, kendimi deneyemiyorum.
Lukas Liesis

Düğüm yeniden başlatma no hakkında soruyorsanız, komut istemini tamamen kapatana kadar kaybolmaz. Ancak Windows Server ofc'yi yeniden başlatırsa kaybolur.
16:14, garenyondem

2
işletim sistemi yeniden başlatma hakkında konuşmak. Bu yüzden, Windows güncellemelerinin her yüklendiğinde veya sadece herhangi bir yeniden başlatmada bu sorunla ilgili tekrar tekrar merak etmenin başka bir yolunu bulmalıyım.
Lukas Liesis

2

Uygulamanızda webpack kullanıyorsanız , bunu kullanarak kolayca ayarlayabilirsiniz DefinePlugin...

Bu yüzden de pluginbölümde, set NODE_ENV için production:

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

1

Birden fazla ortama sahip olmak için daha önce tüm cevaplara ihtiyacınız var (NODE_ENV parametresi ve dışa aktarma), ancak hiçbir şey yüklemeye gerek kalmadan çok basit bir yaklaşım kullanıyorum. Package.json dosyasında ihtiyacınız olan her env için bir betik koymanız yeterlidir:

...
"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"
  }
 ...

Ardından, npm startkullanımı kullanmak yerine uygulamayı başlatmak içinnpm run script-prod .

Kodda şu anki ortama process.env.NODE_ENV .

Voila.


NODE_ENV "geliştirme" ya da "üretim" olmalıdır, yukarıdaki 3. taraf kodu tarafından tanınmıyor (buna rağmen process.env'ye
baksanız

1

Windows CMD -> set NODE_ENV=production

Windows Powershell -> $env:NODE_ENV="production"

MAC -> export NODE_ENV=production



0

İki örnekli nesne nesnesi örneği oluşturmuş olabilirsiniz

örneğin: var con1 = yeni Sequelize (); var con2 = yeni Sequelize ();

aynı hata oluşacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.