Saya bertanya di sini: node.js memerlukan warisan?
dan diberitahu bahwa saya dapat mengatur variabel ke ruang lingkup global dengan meninggalkan var.
Ini tidak bekerja untuk saya.
yaitu:
_ = require('underscore');
Tidak membuat _ tersedia pada file yang diperlukan. Saya dapat mengatur dengan express app.set
dan memilikinya tersedia di tempat lain.
Adakah yang bisa mengkonfirmasi bahwa ini seharusnya berhasil? Terima kasih.
javascript
node.js
express
Harry
sumber
sumber
exports
. Jauh lebih baik.Jawaban:
Anda dapat menggunakan
global
seperti ini:sumber
window
adalah objek global.document
adalah properti dariwindow
.Dalam node, Anda dapat mengatur variabel global melalui objek "global" atau "GLOBAL":
atau lebih bermanfaat ...
Dari sumber simpul, Anda dapat melihat bahwa ini saling terkait:
Dalam kode di atas, "ini" adalah konteks global. Dengan sistem modul commonJS (yang menggunakan simpul), objek "ini" di dalam modul (yaitu, "kode Anda") BUKAN konteks global. Untuk buktinya, lihat di bawah ini di mana saya memuntahkan objek "ini" dan kemudian objek "GLOBAL" raksasa.
** Catatan: tentang pengaturan "GLOBAL._", secara umum Anda hanya perlu melakukannya
var _ = require('underscore');
. Ya, Anda melakukannya di setiap file yang menggunakan garis bawah, seperti halnya di Java yang Anda lakukanimport com.foo.bar;
. Ini membuatnya lebih mudah untuk mengetahui apa yang kode Anda lakukan karena hubungan antar file bersifat 'eksplisit'. Agak menyebalkan, tapi bagus. .... Itulah khotbahnya.Ada pengecualian untuk setiap aturan. Saya memiliki persis satu contoh di mana saya perlu mengatur "GLOBAL._". Saya sedang membuat sistem untuk mendefinisikan "config" file yang pada dasarnya JSON, tetapi "ditulis dalam JS" untuk memungkinkan fleksibilitas yang sedikit lebih. File konfigurasi seperti itu tidak memiliki pernyataan 'wajib', tapi saya ingin mereka memiliki akses ke garis bawah (sistem SELURUH didasarkan pada template garis bawah dan garis bawah), jadi sebelum mengevaluasi "konfigurasi", saya akan menetapkan "GLOBAL._". Jadi ya, untuk setiap aturan, ada pengecualian di suatu tempat. Tetapi Anda sebaiknya memiliki alasan yang sangat bagus dan bukan hanya "saya bosan mengetik 'wajib' jadi saya ingin istirahat dengan konvensi".
sumber
.js
file dan panggilan biasarequire
sebelum mengekspor konfigurasi?Solusi lain yang menggunakan kata kunci GLOBAL adalah mimpi buruk untuk mempertahankan / keterbacaan (+ namespace polusi dan bug) ketika proyek semakin besar. Saya telah melihat kesalahan ini berkali-kali dan memiliki kesulitan untuk memperbaikinya.
Gunakan file JS kemudian gunakan ekspor modul.
Contoh:
globals.js
Maka jika Anda ingin menggunakan ini, gunakan wajib.
sumber
globals.domain
?Bagaimana dengan namespace global
global.MYAPI = {}
Edit setelah komentar camilo-martin : Semua poster lain berbicara tentang pola buruk yang terlibat. Jadi mengesampingkan diskusi itu, cara terbaik untuk memiliki variabel yang didefinisikan secara global (pertanyaan OP) adalah melalui ruang nama.
@ tip: http://thanpol.as/javascript/development-using-namespaces
sumber
require
! Tidak apa-apa menggunakan ruang nama, tapi jangan gunakanglobal.foo = global.foo || {}
semua file, atau apa saja. Membutuhkan file yang mendefinisikan namespace. Lakukan untuk anak-anak.Anda bisa menggunakan objek global.
sumber
Saya setuju bahwa menggunakan namespace global / GLOBAL untuk menetapkan apa pun global adalah praktik buruk dan tidak menggunakannya sama sekali dalam teori ( secara teori menjadi kata yang digunakan). Namun (ya, operatif) saya menggunakannya untuk mengatur kelas kesalahan kustom:
Ya, tabu di sini, tetapi jika situs / proyek Anda menggunakan kesalahan khusus di seluruh tempat, pada dasarnya Anda perlu mendefinisikannya di mana-mana, atau setidaknya di suatu tempat untuk:
Menentukan kesalahan khusus saya di namespace global menyelamatkan saya dari kerumitan mengharuskan perpustakaan kesalahan pelanggan saya. Pencitraan melempar kesalahan khusus di mana kesalahan khusus itu tidak terdefinisi.
Juga, jika ini salah maka tolong beri tahu saya karena saya baru saja mulai melakukan ini baru-baru ini
sumber