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).
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.
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:
Di baris perintah:
set NODE_ENV=production&&npm start
atau
set NODE_ENV=production&&node index.js
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.
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.
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.
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:
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:
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.
Ini mengembalikan 'tidak terdefinisi' saat menggunakan set, dan itu akan mengembalikan 'pengembangan' jika menggunakan setx dan me-restart Visual Studio.
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 Variabel Lingkungan akan terbuka.
Di bagian bawah, di bawah Variabel sistem, pilih Baru ... Ini akan membuka kotak dialog Variabel Sistem Baru.
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.
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.jssepertinya 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.
Perhatikan bahwa output teks dari apa yang dilakukan server ditekan, dan saya tidak yakin apakah itu dapat diperbaiki. (Memperluas jawaban @ jsalonen.)
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"
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.
Jawaban:
Versi Windows saat ini menggunakan Powershell sebagai shell default, jadi gunakan:
Per @ jsalonen jawaban di bawah ini. Jika Anda menggunakan CMD (yang tidak lagi dipertahankan), gunakan
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).
sumber
set NODE_ENV=production && node app
. Lebih nyaman mengkonfigurasipackage.json
sesuai:"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
untuk memeriksa nilainya saat ini.cross-env
adalah 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.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:
Yang cukup nyaman! Tidak ada perintah khusus Windows atau Unix lagi!
sumber
Di PowerShell:
sumber
set NODE_ENV=production
tidak bekerja untuk saya di PowerShell tetapi ini berhasil. Terima kasih!$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.cross-env NODE_ENV=production
opsi 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_ENVIni 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:
Di baris perintah:
atau
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.
sumber
Kamu bisa menggunakan
Ini mungkin cara terbaik untuk melakukannya, karena ini kompatibel pada Windows dan Unix.
Dari dokumentasi run-script npm :
sumber
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
The--
adalah wajib . Gantinode -e 'console.log(process.env.NODE_ENV)'
dengan perintah apa pun yang Anda inginkan.npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
dan ... tidak ada yang terjadi. Saya tidak yakin metode ini berfungsi di windows.Jika Anda menggunakan Visual Studio dengan NTVS, Anda dapat mengatur variabel lingkungan di halaman properti proyek:
Seperti yang Anda lihat, dropdown Konfigurasi dan Platform dinonaktifkan (saya belum melihat terlalu jauh mengapa ini terjadi), tetapi jika Anda mengedit
.njsproj
file Anda sebagai berikut:Dropdown 'Debug / Release' kemudian akan mengontrol bagaimana variabel diatur sebelum memulai Node.js.
sumber
Saya menulis modul win-node-env yang dengannya Anda dapat menjalankan perintah seperti yang Anda lakukan pada * nix.
Ia bekerja dengan menciptakan
NODE_ENV.cmd
yang menetapkanNODE_ENV
variabel 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.
sumber
Pengalaman saya menggunakan Node.js pada Windows 7 64-bit di Visual Studio 2013 adalah yang perlu Anda gunakan
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:
Ini mengembalikan 'tidak terdefinisi' saat menggunakan set, dan itu akan mengembalikan 'pengembangan' jika menggunakan setx dan me-restart Visual Studio.
sumber
cmd
- bukan PowerShell? Ugh, ayolah windows, kumpulkan.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 Variabel Lingkungan akan terbuka.
Di bagian bawah, di bawah Variabel sistem, pilih Baru ... Ini akan membuka kotak dialog Variabel Sistem Baru.
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.
sumber
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, menggunakanset node_env=production&& node whatever.js
karya 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.
sumber
Untuk menjalankan aplikasi Anda di PowerShell (karena
&&
tidak diizinkan):Perhatikan bahwa output teks dari apa yang dilakukan server ditekan, dan saya tidak yakin apakah itu dapat diperbaiki. (Memperluas jawaban @ jsalonen.)
sumber
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
pertama dalam tipe powershell
lalu ketik
Ini akan berfungsi dengan sempurna menampilkan semua output.
sumber
Untuk beberapa variabel lingkungan,
.env
file lebih mudah:Mudah digunakan dengan
dotenv-safe
:npm install --save dotenv-safe
.index.js
) dan langsung menggunakannya denganprocess.env
perintah :Jangan lupa untuk mengabaikan
.env
file di VCS Anda .Program Anda kemudian gagal dengan cepat jika variabel "didefinisikan" di
.env.example
tidak disetel sebagai variabel lingkungan atau dalam.env
.sumber
Jika Anda menggunakan terminal GITBASH
"set NODE_ENV=production"
tidak akan berfungsi, yang dapat Anda lakukan adalah mengetikkan "eksporNODE_ENV=production"
sumber
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.
sumber
Saya menggunakan skrip npm untuk menjalankan tugas tegukan tanpa "&&"
NODE_ENV = testcases npm menjalankan seed-db
sumber
Mulai ulang kode VS jika NODE_ENV atau variabel lingkungan lainnya tidak memberikan nilai yang benar. Ini akan berfungsi setelah restart.
sumber