Saya menggunakan node.js + express.js + everyauth.js. Saya telah memindahkan semua logika everyauth saya ke dalam file modul
var login = require('./lib/everyauthLogin');
di dalamnya saya memuat file konfigurasi oAuth saya dengan kombinasi kunci / rahasia:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Kode-kode ini berbeda untuk lingkungan yang berbeda - pengembangan / pementasan / produksi karena callback ditujukan ke url yang berbeda.
Qu. Bagaimana cara mengaturnya di konfigurasi lingkungan untuk menyaring semua modul atau dapatkah saya meneruskan jalur langsung ke modul?
Diatur dalam env:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Masuk
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? harap itu masuk akal
Jawaban:
Solusi saya,
memuat aplikasi menggunakan
Kemudian atur
config.js
sebagai fungsi, bukan sebagai objekKemudian sesuai dengan solusi Jans, muat file dan buat instance baru yang dapat kami berikan nilai jika diperlukan, dalam hal ini
process.env.NODE_ENV
bersifat global jadi tidak diperlukan.Kemudian kita dapat mengakses properti objek config persis seperti sebelumnya
sumber
new
perlu?new
. Saya mengikuti diconfig.js
....Config = function(){...}; module.exports = Config()
Anda juga dapat memiliki file JSON dengan NODE_ENV sebagai level teratas. IMO, ini adalah cara yang lebih baik untuk mengekspresikan pengaturan konfigurasi (sebagai lawan menggunakan skrip yang mengembalikan pengaturan).
Contoh untuk env.json:
sumber
Solusi yang sangat berguna adalah menggunakan modul config .
setelah memasang modul:
Anda dapat membuat file konfigurasi default.json . (Anda dapat menggunakan objek JSON atau JS menggunakan ekstensi .json5)
Sebagai contoh
Konfigurasi default ini dapat ditimpa oleh file konfigurasi lingkungan atau file konfigurasi lokal untuk lingkungan pengembangan lokal:
production.json bisa jadi:
development.json bisa jadi:
Di PC lokal Anda, Anda dapat memiliki local.json yang menggantikan semua lingkungan, atau Anda dapat memiliki konfigurasi lokal tertentu sebagai local-production.json atau local-development.json .
Daftar lengkap urutan pemuatan .
Di dalam Aplikasi Anda
Di aplikasi Anda, Anda hanya perlu memerlukan config dan atribut yang diperlukan.
Muat Aplikasi
memuat aplikasi menggunakan:
atau pengaturan lingkungan yang benar dengan forever atau pm2
Selama-lamanya:
PM2 (melalui shell):
PM2 (melalui .json):
process.json
Lalu
Solusi ini sangat bersih dan memudahkan pengaturan file konfigurasi yang berbeda untuk lingkungan Produksi / Pementasan / Pengembangan dan untuk pengaturan lokal juga.
sumber
Secara singkat
Jenis penyiapan ini sederhana dan elegan:
env.json
common.js
app.js
Untuk berjalan dalam mode produksi:
$ NODE_ENV=production node app.js
Secara terperinci
Solusi ini dari: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , lihat untuk lebih detail.
sumber
Cara kami melakukan ini adalah dengan memberikan argumen saat memulai aplikasi dengan lingkungan. Misalnya:
Di app.js kami kemudian memuat
dev.js
sebagai file konfigurasi kami. Anda dapat mengurai opsi ini dengan optparse-js .Sekarang Anda memiliki beberapa modul inti yang bergantung pada file konfigurasi ini. Ketika Anda menulisnya seperti itu:
Dan Anda dapat menyebutnya kemudian
app.js
seperti:sumber
app.configure('development
kode app.js , tetapi akan melihat apakah saya dapat menggunakan solusi ini dengan ituCara yang elegan adalah menggunakan
.env
file untuk mengganti pengaturan produksi secara lokal. Tidak perlu sakelar baris perintah. Tidak perlu semua koma dan tanda kurung dalam sebuahconfig.json
file. Lihat jawaban saya di siniContoh: di komputer saya,
.env
file tersebut adalah:Lokal saya
.env
menimpa variabel lingkungan apa pun. Namun di server pementasan atau produksi (mungkin mereka ada di heroku.com), variabel lingkungan sudah disetel sebelumnya ke tahapNODE_ENV=stage
atau produksiNODE_ENV=prod
.sumber
setel variabel lingkungan di server penerapan (mis .: seperti NODE_ENV = produksi). Anda dapat mengakses variabel lingkungan Anda melalui process.env.NODE_ENV. Temukan file konfigurasi berikut untuk pengaturan global
base berisi konfigurasi umum untuk semua lingkungan.
lalu impor di modul lain seperti
Selamat Coding ...
sumber
Bagaimana kalau melakukan ini dengan cara yang jauh lebih elegan dengan modul nodejs-config .
Modul ini dapat mengatur lingkungan konfigurasi berdasarkan nama komputer Anda. Setelah itu ketika Anda meminta konfigurasi, Anda akan mendapatkan nilai spesifik lingkungan.
Sebagai contoh mari kita asumsikan Anda memiliki dua mesin pengembangan bernama pc1 dan pc2 dan mesin produksi bernama pc3. Setiap kali Anda meminta nilai konfigurasi dalam kode Anda di pc1 atau pc2, Anda harus mendapatkan konfigurasi lingkungan "pengembangan" dan di pc3 Anda harus mendapatkan konfigurasi lingkungan "produksi". Ini bisa dicapai seperti ini:
Sekarang buat instance konfigurasi baru dengan sintaks berikut.
Sekarang Anda bisa mendapatkan nilai konfigurasi apa pun tanpa mengkhawatirkan lingkungan seperti ini:
sumber
Jawaban ini bukanlah sesuatu yang baru. Ini mirip dengan apa yang @andy_t sebutkan. Tetapi saya menggunakan pola di bawah ini karena dua alasan.
Implementasi bersih tanpa ketergantungan npm eksternal
Gabungkan pengaturan konfigurasi default dengan pengaturan berbasis lingkungan.
Implementasi Javascript
Saya biasanya menggunakan skrip dalam proyek node saya. Di bawah ini adalah implementasi copy-paste saya yang sebenarnya.
Implementasi skrip ketikan
sumber