Bagaimana saya dapat mengatur NODE_ENV = produksi pada Windows?

340

Di Ubuntu itu cukup sederhana; Saya dapat menjalankan aplikasi menggunakan:

$ NODE_ENV=production node myapp/app.js

Namun, ini tidak berfungsi pada Windows. Apakah ada file konfigurasi tempat saya dapat mengatur atribut?

Mendongkrak
sumber
Untuk solusi multiplatform, Anda dapat menemukan jawabannya stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Jawaban:

485

Versi Windows saat ini menggunakan Powershell sebagai shell default, jadi gunakan:

$env:NODE_ENV="production"

Per @ jsalonen jawaban di bawah ini. Jika Anda menggunakan CMD (yang tidak lagi dipertahankan), gunakan

set NODE_ENV=production

Ini harus dijalankan pada prompt perintah tempat Anda bermaksud menjalankan aplikasi Node.js Anda.

Baris di atas akan mengatur variabel lingkungan NODE_ENV untuk prompt perintah tempat Anda menjalankan perintah.

Untuk mengatur variabel lingkungan secara global agar tetap ada di luar hanya satu perintah, Anda dapat menemukan alat dari Sistem di Panel Kontrol (atau dengan mengetikkan 'lingkungan' ke dalam kotak pencarian di menu mulai).

Jani Hartikainen
sumber
112
Bagi siapa pun masih berjuang dengan ini: set NODE_ENV=production && node app. Lebih nyaman mengkonfigurasi package.jsonsesuai: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
5
@ShuruiLiu perintah tidak akan menampilkan apa pun, tetapi Anda dapat mengetik echo %NODE_ENV%untuk memeriksa nilainya saat ini.
Jani Hartikainen
169
Head up: "set NODE_ENV = production &&" menambahkan spasi tambahan ke variabel. Saya perlu "set NODE_ENV = produksi &&" untuk menghindari ruang tambahan yang merusak aplikasi simpul seperti Ghost.
fajar
12
@Amberlamps yang bukan solusi yang baik karena NODE_ENV kemudian hanya hardcoded untuk semua mesin; tujuan sebenarnya adalah untuk mengubah env oleh mesin menggunakan variabel env atau untuk memberikan nilai pada baris perintah, bukan hardcode dalam file package.json.
Alexander Mills
6
Saya pikir menggunakan cross-envadalah solusi yang lebih baik untuk masalah ini jika tim Anda bekerja pada sistem operasi campuran. Jawaban dari @MoOx akan menjadi pilihan saya sebagai jawaban untuk pertanyaan ini.
philk
230

Saya baru saja menemukan paket Node.js yang bagus yang dapat membantu banyak untuk mendefinisikan variabel lingkungan menggunakan sintaks unik, lintas platform.

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

Ini memungkinkan Anda untuk menulis sesuatu seperti ini:

cross-env NODE_ENV=production my-command

Yang cukup nyaman! Tidak ada perintah khusus Windows atau Unix lagi!

MoOx
sumber
25
Sedangkan jawaban pertama adalah benar. Saya pikir jawaban ini paling dapat diandalkan dan harus digunakan
d4rklit3
Ini solusi hebat!
Kirill Gusyatin
Sederhana dan sempurna menyelesaikan masalah saya. Saya hanya bisa membangun di Linux. Ini diselesaikan baik, Linux dan Windows.
tista3
Jawaban ini layak mendapatkan lebih banyak cinta, harus yang diterima :)
Honza Kalfus
Ini adalah jawaban terbaik untuk saya juga
knaos
166

Di PowerShell:

$env:NODE_ENV="production"
jsalonen
sumber
4
ps: jangan lupa $ dan tanda kutip;)
George
6
set NODE_ENV=productiontidak bekerja untuk saya di PowerShell tetapi ini berhasil. Terima kasih!
Kemarahan
6
Berjuang sedikit untuk mendapatkan ini bekerja dari Powershell dalam Visual Studio Code. Kupikir aku akan meninggalkan solusi di sini. Saya mencoba menjalankan perintah "Gulp", sambil memastikan nilai env yang benar telah ditetapkan. Inilah yang akhirnya bekerja untuk saya: $env:NODE_ENV="development"; gulp runMytask. Perhatikan titik koma di sana. File tegukan dapat menggunakan logika kondisional pada process.env.NODE_ENV. Kecuali Anda mengaturnya, itu tidak akan ditentukan.
dvsoukup
2
Hanya solusi ini yang berfungsi untuk saya dengan windows 10 dan webpack 3.8.1
Роман Арсеньев
1
Ini berfungsi sempurna. Tapi, cross-env NODE_ENV=productionopsi ini benar-benar solusi yang lebih baik jika menjalankan perintah npm dari package.json yang mengharuskan env diatur. Terlalu mudah untuk membiarkan env diset pada dev / prod setelah menggunakan opsi $ env: NODE_ENV
Drenai
105

Ini akan ideal jika Anda dapat mengatur parameter pada baris yang sama dengan panggilan Anda untuk memulai Node.js di Windows. Lihatlah yang berikut ini dengan cermat, dan jalankan persis seperti yang dinyatakan:

Anda memiliki dua opsi ini:

  1. Di baris perintah:

    set NODE_ENV=production&&npm start

    atau

    set NODE_ENV=production&&node index.js
  2. Triknya agar berfungsi di Windows adalah Anda harus menghapus spasi putih sebelum dan sesudah "&&". Mengkonfigurasi file package.json Anda dengan start_windows (lihat di bawah) di bawah ini. Kemudian Jalankan "npm run start_windows" di baris perintah.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
    
Alexander Mills
sumber
1
Apakah DEF ingin tahu cara membuatnya berfungsi seperti ini.
SC_Chupacabra
2
Bekerja untukku. Harus menghapus spasi putih meskipun "set NODE_ENV = produksi && nodemon server.js"
SC_Chupacabra
2
Seandainya saya sudah membaca sejauh ini sebelum mencoba jawaban di atas, akan menghemat waktu saya. : \
Jeff
1
Pada catatan yang berhubungan samar-samar saya menemukan bahwa && tidak berfungsi seperti yang diharapkan di windows saat merantai beberapa perintah bersamaan. Jika ragu coba gunakan | sebagai gantinya
Mike
1
ini bekerja untuk saya di mesin windows 10 64bit dari cmd dan power-shell
Ani
30

Kamu bisa menggunakan

npm run env NODE_ENV=production

Ini mungkin cara terbaik untuk melakukannya, karena ini kompatibel pada Windows dan Unix.

Dari dokumentasi run-script npm :

Skrip env adalah perintah bawaan yang dapat digunakan untuk membuat daftar variabel lingkungan yang akan tersedia untuk skrip saat runtime. Jika perintah "env" didefinisikan dalam paket Anda, itu akan diutamakan daripada built-in.

Brieuc P
sumber
3
Bagaimana kita bisa menjalankan perintah lain dengan set variabel? Ini sepertinya tidak berfungsi: npm jalankan env NODE_ENV = produksi && echo $ NODE_ENV. Mungkin mereka dieksekusi dalam dua shell yang berbeda?
Jonas Kello
1
Dari apa yang bisa saya lihat, ini tidak berhasil sama sekali. Dari dokumen itu sendiri, Ini hanya daftar variabel lingkungan, bukan pengaturannya.
kumarharsh
2
Tidak bekerja untuk saya. Ini daftar vars, tunjukkan var yang Anda tentukan, tetapi pada saat runtime, var tidak ok di process.env.YOUR_VAR ...
MoOx
3
@JonasKello Anda akan menggunakan ini: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'The --adalah wajib . Ganti node -e 'console.log(process.env.NODE_ENV)'dengan perintah apa pun yang Anda inginkan.
Pauan
Mencoba ini dengan perintah ini: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsdan ... tidak ada yang terjadi. Saya tidak yakin metode ini berfungsi di windows.
jcollum
14

Jika Anda menggunakan Visual Studio dengan NTVS, Anda dapat mengatur variabel lingkungan di halaman properti proyek:

Properti Proyek Visual Studio NTVS

Seperti yang Anda lihat, dropdown Konfigurasi dan Platform dinonaktifkan (saya belum melihat terlalu jauh mengapa ini terjadi), tetapi jika Anda mengedit .njsprojfile Anda sebagai berikut:

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

Dropdown 'Debug / Release' kemudian akan mengontrol bagaimana variabel diatur sebelum memulai Node.js.

paul
sumber
12

Saya menulis modul win-node-env yang dengannya Anda dapat menjalankan perintah seperti yang Anda lakukan pada * nix.

NODE_ENV=production node myapp/app.js

Ia bekerja dengan menciptakan NODE_ENV.cmdyang menetapkan NODE_ENVvariabel lingkungan dan memunculkan proses anak dengan sisa perintah dan argumennya.

Cukup instal (secara global), dan jalankan perintah skrip npm Anda, itu akan membuatnya otomatis berfungsi.

npm install -g win-node-env
laggingreflex
sumber
persis apa yang saya cari! untuk berjalan dengan skrip npm, dan ia bahkan bekerja dengan alat cli node lain seperti jest. Jadi "atur NODE_ENV = debug & cls & bercanda ..." menjadi "cls & NODE_ENV = debug bercanda"
Z. Khullah
9

Pengalaman saya menggunakan Node.js pada Windows 7 64-bit di Visual Studio 2013 adalah yang perlu Anda gunakan

setx NODE_ENV development

dari jendela cmd. DAN Anda harus me-restart Visual Studio agar nilai baru dapat dikenali.

Sintaks yang ditetapkan hanya berlangsung selama durasi jendela cmd di mana ia diatur.

Tes sederhana di Node.js:

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

Ini mengembalikan 'tidak terdefinisi' saat menggunakan set, dan itu akan mengembalikan 'pengembangan' jika menggunakan setx dan me-restart Visual Studio.

edhubbell
sumber
cmd- bukan PowerShell? Ugh, ayolah windows, kumpulkan.
jcollum
komentar Anda tentang restart kode VS sangat berguna!
Yury Kozlov
8

Berikut adalah metode baris non-perintah:

Di Windows 7 atau 10, ketikkan lingkungan ke kotak pencarian menu mulai, dan pilih Edit variabel lingkungan sistem.

Atau, navigasikan ke Control Panel \ System and Security \ System, dan klik Pengaturan sistem lanjutan

Ini akan membuka kotak dialog System properties dengan tab Advanced dipilih. Di bagian bawah, Anda akan melihat tombol Environment Variables .... Klik ini.

Kotak Dialog Sistem

Kotak Dialog Variabel Lingkungan akan terbuka.

Kotak Dialog Variabel Lingkungan

Di bagian bawah, di bawah Variabel sistem, pilih Baru ... Ini akan membuka kotak dialog Variabel Sistem Baru.

masukkan deskripsi gambar di sini

Masukkan nama dan nilai variabel, dan klik OK.

Anda harus menutup semua perintah cmd dan me-restart server Anda agar variabel baru tersedia untuk diproses.env. Jika masih tidak muncul, mulai ulang mesin Anda.

Mattatat-tat
sumber
2
Terima kasih! Saya telah melakukan semua ini tetapi tidak berfungsi sampai saya me-restart server.
Marcel Lamothe
7

Hanya untuk memperjelas, dan untuk orang lain yang mungkin mencabut rambut mereka ...

Jika Anda menggunakan git bash di Windows , set node_env=production&& node whatever.js sepertinya tidak berfungsi . Sebagai gantinya, gunakan cmd asli. Kemudian, menggunakan set node_env=production&& node whatever.jskarya seperti yang diharapkan.

Kasus penggunaan saya:

Saya mengembangkan di Windows karena alur kerja saya jauh lebih cepat, tetapi saya perlu memastikan bahwa middleware khusus pengembangan aplikasi saya tidak menyala di lingkungan produksi.

pstrawberriedev
sumber
6

Untuk menjalankan aplikasi Anda di PowerShell (karena &&tidak diizinkan):

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

Perhatikan bahwa output teks dari apa yang dilakukan server ditekan, dan saya tidak yakin apakah itu dapat diperbaiki. (Memperluas jawaban @ jsalonen.)

Cameron Yick
sumber
Itu tidak berhasil untuk saya:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti
4

pertama dalam tipe powershell

$env:NODE_ENV="production"

lalu ketik

node fileName.js

Ini akan berfungsi dengan sempurna menampilkan semua output.

Abhinav
sumber
2

Untuk beberapa variabel lingkungan, .envfile lebih mudah:

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

Mudah digunakan dengan dotenv-safe:

  1. Instal dengan npm install --save dotenv-safe.
  2. Sertakan dalam kode Anda (terbaik di awal index.js) dan langsung menggunakannya dengan process.envperintah :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Jangan lupa untuk mengabaikan .envfile di VCS Anda .

Program Anda kemudian gagal dengan cepat jika variabel "didefinisikan" di .env.exampletidak disetel sebagai variabel lingkungan atau dalam .env.

Dominik
sumber
File .env hanya cocok untuk rahasia dan menambahkan langkah kompleksitas tambahan saat mengatur saat menugaskan orang baru ke proyek atau menerapkan perubahan pada mereka.
coiso
@coiso Tanpa generik, tempat umum, di mana Anda meletakkan banyak variabel env? Baik dalam file skrip atau dalam pengaturan yang tergantung pada IDE, Anda bahkan lebih terikat pada alat tertentu. Ini membuat pengintegrasian anggota tim baru menjadi lebih sulit, saya pikir.
Dominik
2

Jika Anda menggunakan terminal GITBASH "set NODE_ENV=production" tidak akan berfungsi, yang dapat Anda lakukan adalah mengetikkan "eksporNODE_ENV=production"

Bozhinovski
sumber
0

ini tidak akan menetapkan variabel tetapi berguna dalam banyak kasus. Saya tidak akan merekomendasikan menggunakan ini untuk produksi, tetapi seharusnya tidak apa-apa jika Anda bermain-main dengan npm.

npm install --production
Bar Horing
sumber
0

Saya menggunakan skrip npm untuk menjalankan tugas tegukan tanpa "&&"

NODE_ENV = testcases npm menjalankan seed-db

Mari Orlova
sumber
0

Mulai ulang kode VS jika NODE_ENV atau variabel lingkungan lainnya tidak memberikan nilai yang benar. Ini akan berfungsi setelah restart.

Rakesh Pahuja
sumber