Windows'ta NODE_ENV = üretimini nasıl ayarlayabilirim?


340

Ubuntu'da bu oldukça basit; Uygulamayı kullanarak çalıştırabilirsiniz:

$ NODE_ENV=production node myapp/app.js

Ancak, bu Windows üzerinde çalışmaz. Özelliği ayarlayabileceğim bir yapılandırma dosyası var mı?


Çok
platformlu

Yanıtlar:


486

Windows'un güncel sürümleri Powershell'i varsayılan kabuk olarak kullanır, bu nedenle şunu kullanın:

$env:NODE_ENV="production"

Aşağıdaki @ jsalonen cevabı. CMD'deyseniz (artık korunmaz),

set NODE_ENV=production

Bu işlem, Node.js uygulamanızı çalıştırmak istediğiniz komut isteminde yürütülmelidir.

Yukarıdaki satır, komutu yürüttüğünüz komut istemi için NODE_ENV ortam değişkenini ayarlar.

Ortam değişkenlerini genel olarak tek komut isteminin ötesinde kalacak şekilde ayarlamak için, aracı Denetim Masası'ndaki Sistem'den (veya başlat menüsündeki arama kutusuna 'ortam' yazarak) bulabilirsiniz.


112
Hala bununla mücadele eden herkes için set NODE_ENV=production && node app. Daha rahatlıkla yapılandırmak package.jsonbuna göre: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps

5
@ShuruiLiu komut hiçbir şey vermeyecektir, ancak echo %NODE_ENV%geçerli değerini kontrol etmek için yazabilirsiniz .
Jani Hartikainen

169
Uyarı: "set NODE_ENV = production &&", değişkene bir boşluk ekler. Ghost gibi düğüm uygulamalarını bozan ek alandan kaçınmak için "set NODE_ENV = production &&" ayarına ihtiyacım vardı.
daw

12
@Amberlamps bu iyi bir çözüm değil çünkü NODE_ENV tüm makineler için sadece kodlanmış; asıl amaç env değişkenini kullanarak env'yi makineyle değiştirmek veya package.json dosyasında sabit kodlamak yerine komut satırındaki değeri iletmektir.
Alexander Mills

6
cross-envEkibiniz karışık işletim sistemlerinde çalışıyorsa, bu sorunun kullanılmasının daha iyi bir çözüm olduğunu düşünüyorum . @MoOx'tan gelen cevap bu soruya cevap olarak benim seçimim olacaktır.
philk

230

Sadece benzersiz bir sözdizimi, çapraz platform kullanarak ortam değişkenlerini tanımlamak için çok yardımcı olabilecek güzel bir Node.js paketi buldum.

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

Bunun gibi bir şey yazmanıza izin verir:

cross-env NODE_ENV=production my-command

Hangi oldukça uygun! Artık Windows veya Unix'e özgü komutlar yok!


25
İlk cevap doğru olsa da. Bu cevabın en güvenilir olduğunu ve kullanılması gerektiğini düşünüyorum
d4rklit3

Bu harika bir çözüm!
Kirill Gusyatin

Basit ve sorunumu mükemmel bir şekilde çözüyor. Yalnızca Linux üzerinde çalışabildim. Bu hem Linux hem de Windows'u çözdü.
tista3

Bu cevap daha fazla aşkı hak ediyor, kabul edilen kişi olmalı :)
Honza Kalfus

Bu da benim için en iyi cevap
knaos

166

PowerShell'de:

$env:NODE_ENV="production"

4
ps: $ ve tırnak unutmayın;)
George

6
set NODE_ENV=productionPowershell'de benim için çalışmadı ama bu işe yaradı. Teşekkürler!
öfke

6
Visual Studio Code içinde Powershell'den çalışmak için biraz uğraştım. Burada çözüm bırakacağımı düşündüm. Doğru env değerinin ayarlanmasını sağlarken bir "Gulp" komutu çalıştırmaya çalışıyordum. Benim için yaralanan şey bu $env:NODE_ENV="development"; gulp runMytask. Oradaki yarım sütuna dikkat edin. Yırtılma dosyası process.env.NODE_ENV üzerinde koşullu mantık kullanabilir. Ayarlamadığınız sürece tanımsız olacaktır.
dvsoukup

2
Windows 10 ve webpack 3.8.1 ile sadece bu çözüm benim için çalışıyor
Роман Арсеньев

1
Mükemmel çalışıyor. Ancak, cross-env NODE_ENV=productionenv'nin ayarlanmasını gerektiren package.json öğesinden npm komutları çalıştırıyorsanız , seçenek gerçekten daha iyi bir çözümdür. $ Env: NODE_ENV seçeneğini kullandıktan sonra env setini dev / prod üzerinde bırakmak çok kolay
Drenai

105

Windows'ta Node.js'yi başlatma çağrınızla aynı satırda parametreler ayarlayabiliyorsanız ideal olur. Aşağıdakilere dikkatlice bakın ve tam olarak belirtildiği gibi çalıştırın:

Bu iki seçeneğiniz var:

  1. Komut satırında:

    set NODE_ENV=production&&npm start

    veya

    set NODE_ENV=production&&node index.js
  2. Windows üzerinde çalışması için hile "&&" önce ve sonra boşluk kaldırmak gerekir. Package.json dosyanızı aşağıdaki başlangıç_window'ları ile yapılandırın (aşağıya bakın). Sonra komut satırında "npm run start_windows" komutunu çalıştırın.

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

1
DEF, bu şekilde çalışmasını nasıl sağlayacağını bilmek ister.
SC_Chupacabra

2
Benim için çalıştı. "Set NODE_ENV = üretim && nodemon server.js" olsa da boşluk kaldırmak zorunda
SC_Chupacabra

2
Keşke yukarıdaki cevabı denemeden önce bu konuyu okumuş olsaydım, biraz zaman kazandıracaktı. : \
Jeff

1
Belirsiz bir şekilde ilgili bir notta, birden fazla komutu birlikte zincirlerken &&'nin pencerelerde beklendiği gibi çalışmadığını gördüm. Şüpheniz varsa | yerine
Mike

1
Bu hem cmd hem de power-shell Windows 10 64bit makinede benim için çalıştı
Ani

30

Kullanabilirsiniz

npm run env NODE_ENV=production

Muhtemelen bunu yapmanın en iyi yoludur, çünkü hem Windows hem de Unix'te uyumludur.

Gönderen npm çalışma komut belgelerinde :

Env betiği, çalışma zamanında betiğin kullanabileceği ortam değişkenlerini listelemek için kullanılabilen özel bir yerleşik komuttur. Paketinizde bir "env" komutu tanımlanmışsa, yerleşik olandan öncelikli olacaktır.


3
Değişken seti ile başka bir komutu nasıl yürütebiliriz? Bu işe yaramadı: npm run env NODE_ENV = üretim && echo $ NODE_ENV. Muhtemelen iki farklı mermide idam ediliyorlar mı?
Jonas Kello

1
Görebildiğim kadarıyla, bu hiç işe yaramıyor. Dokümanların kendisinden, yalnızca ortam değişkenlerini listeler , onları ayarlamaz.
kumarharsh

2
Benim için çalışmıyor. Bu liste belirttiğiniz Var Fiyatları, vars ama çalışma zamanı üzerinde, var ... process.env.YOUR_VAR Tamam değildir
MoOx

3
@JonasKello Bu kullanırsınız: olan zorunlu . İstediğiniz komutla değiştirin . npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--node -e 'console.log(process.env.NODE_ENV)'
Pauan

Bunu şu komutla denedim: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsve ... hiçbir şey olmadı. Bu yöntemin pencerelerde çalıştığından emin değilim.
jcollum

14

NTVS ile Visual Studio kullanıyorsanız, proje özellikleri sayfasındaki ortam değişkenlerini ayarlayabilirsiniz:

Visual Studio NTVS Proje Özellikleri

Gördüğünüz gibi, Yapılandırma ve Platform açılır listeleri devre dışı bırakıldı (bunun nedenine çok fazla bakmadım), ancak .njsprojdosyanızı aşağıdaki gibi düzenlerseniz :

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

'Hata Ayıkla / Bırak' açılır menüsü, Node.js'yi başlatmadan önce değişkenin nasıl ayarlanacağını kontrol eder.


12

Komutunuzu * nix'de olduğu gibi çalıştırabileceğiniz bir win-node-env modülü yazdım .

NODE_ENV=production node myapp/app.js

Bir oluşturarak çalışır NODE_ENV.cmdbelirlediğini NODE_ENVortam değişkeni ve yumurtlar komuta ve args geri kalanı ile bir çocuk süreç.

Sadece yükleyin (global olarak) ve npm script komutlarınızı çalıştırın, otomatik olarak çalışmasını sağlamalıdır.

npm install -g win-node-env

tam olarak aradığım şey! npm betikleri ile çalıştırmak ve hatta jest gibi diğer düğüm cli araçlarıyla bile çalışır. Yani "set NODE_ENV = hata ayıklama & cls & jest ..." "cls & NODE_ENV = hata ayıklama jest" olarak
ayarlandı

9

Visual Studio 2013'te Windows 7 64 bit üzerinde Node.js kullanma deneyimim,

setx NODE_ENV development

cmd penceresinden. VE yeni değerin tanınabilmesi için Visual Studio'yu yeniden başlatmanız gerekir.

Ayarlanan sözdizimi yalnızca ayarlandığı cmd penceresinin süresi boyunca devam eder.

Node.js'de basit test:

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

Set kullanırken 'undefined' döndürür ve setx kullanılırken ve Visual Studio yeniden başlatılırsa 'development' döndürür.


cmd- Powershell değil mi? Ugh, pencerelere gel, bir araya getir.
jcollum

VS kodunun yeniden başlatılmasıyla ilgili görüşünüz gerçekten yararlı oldu!
Yury Kozlov

8

Komut olmayan satır yöntemi şöyledir:

Windows 7 veya 10'da, başlat menüsü arama kutusuna ortam yazın ve Sistem ortamı değişkenlerini düzenle'yi seçin.

Alternatif olarak, Denetim Masası \ Sistem ve Güvenlik \ Sistem'e gidin ve Gelişmiş sistem ayarları'nı tıklayın.

Bu, Gelişmiş sekmesi seçili olarak Sistem özellikleri iletişim kutusunu açmalıdır. En altta bir Ortam Değişkenleri ... düğmesi göreceksiniz. Buna tıkla.

Sistem İletişim Kutusu

Ortam Değişkenleri İletişim Kutusu açılacaktır.

Ortam Değişkeni İletişim Kutusu

Altta, Sistem değişkenleri altında Yeni ... seçeneğini belirleyin. Bu, Yeni Sistem Değişkeni iletişim kutusunu açar.

resim açıklamasını buraya girin

Değişken adını ve değerini girin ve Tamam'ı tıklatın.

Yeni değişkenin işlenebilmesi için tüm cmd istemlerini kapatmanız ve sunucunuzu yeniden başlatmanız gerekir. Hala görünmüyorsa, makinenizi yeniden başlatın.


2
Teşekkür ederim! Tüm bunları yaptım ama sunucuyu yeniden başlatana kadar işe yaramadı.
Marcel Lamothe

7

Sadece açıklığa kavuşturmak için ve saçlarını çeken herkes için ...

Windows'ta git bash kullanıyorsanız , set node_env=production&& node whatever.js çalışmıyor gibi görünüyor . Bunun yerine, yerel cmd'yi kullanın. Ardından, set node_env=production&& node whatever.jsbeklendiği gibi çalışır.

Kullanım durumum:

Windows'ta geliştiriyorum çünkü iş akışım çok daha hızlı, ancak uygulamamın geliştirmeye özgü ara katman yazılımının üretim ortamında çalışmadığından emin olmam gerekiyordu.


6

Uygulamanızı PowerShell'de çalıştırmak için ( &&izin verilmediğinden):

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

Sunucunun yaptığı şeyin metin çıktısının bastırıldığına dikkat edin ve bunun düzeltilebilir olup olmadığından emin değilim. (@ Jsalonen cevabını genişleterek.)


Benim için çalışmadı:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti

4

powershell tipinde ilk

$env:NODE_ENV="production"

sonra yaz

node fileName.js

Tüm çıkışları görüntülemek için mükemmel bir şekilde çalışacaktır.


2

İçin birden ortam değişkenleri, bir .envdosya daha uygundur:

# .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

İle kullanımı kolaydır dotenv-safe:

  1. İle yükleyin npm install --save dotenv-safe.
  2. Kodunuza ekleyin (başlangıcında en iyisi index.js) ve doğrudan process.envkomutla kullanın :
require('dotenv').load()
console.log(process.env.DB_HOST)   

VCS'nizdeki dosyayı görmezden gelmeyi.env unutmayın .

Daha sonra, "tanımlanmış" bir değişken .env.exampleya bir ortam değişkeni olarak ayarlanmamışsa, programınız hızlı bir şekilde başarısız olur .env.


.env dosyaları yalnızca sırlar için uygundur ve bir projeye yeni kişiler atarken veya bunlara değişiklikler uygularken ek bir karmaşıklık adımı ekler.
coiso

@coiso Genel, ortak bir yer olmadan birçok env değişkenini nereye koyarsınız ? Bir komut dosyasında veya IDE'ye bağlı bir ortamda, belirli araçlara daha da bağlısınız. Bu, yeni ekip üyelerini entegre etmeyi daha da zorlaştırıyor diye düşünüyorum.
Dominik

2

GITBASH terminalini kullanmıyorsanız "set NODE_ENV=production" , ne yapabilirsiniz "export"NODE_ENV=production"


0

bu bir değişken belirlemez, ancak birçok durumda yararlıdır. Bunu üretim için kullanmanızı tavsiye etmeyeceğim, ancak npm ile oynuyorsanız sorun olmamalı.

npm install --production

0

"&&" olmadan gulp görevi yürütmek için npm betiği kullandım

NODE_ENV = testcases npm run seed-db


0

NODE_ENV veya başka bir ortam değişkeni doğru değer sağlamıyorsa VS kodunu yeniden başlatın. Bu, yeniden başlattıktan sonra çalışmalıdır.

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.