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?
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?
Jawaban:
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).
set NODE_ENV=production && node app
. Lebih nyaman mengkonfigurasi package.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:
cross-env NODE_ENV=production my-command
Yang cukup nyaman! Tidak ada perintah khusus Windows atau Unix lagi!
Di PowerShell:
$env:NODE_ENV="production"
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_ENV
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.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
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.
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.
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:
<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.
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.cmd
yang menetapkan NODE_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.
npm install -g win-node-env
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.
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.
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.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.
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.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Untuk beberapa variabel lingkungan, .env
file 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
:
npm install --save dotenv-safe
.index.js
) dan langsung menggunakannya dengan process.env
perintah :require('dotenv').load()
console.log(process.env.DB_HOST)
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
.
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.
npm install --production
Saya menggunakan skrip npm untuk menjalankan tugas tegukan tanpa "&&"
NODE_ENV = testcases npm menjalankan seed-db
Mulai ulang kode VS jika NODE_ENV atau variabel lingkungan lainnya tidak memberikan nilai yang benar. Ini akan berfungsi setelah restart.