module.exports
adalah objek yang sebenarnya dikembalikan sebagai hasil require
panggilan.
The exports
variabel awalnya ditetapkan untuk objek yang sama (yaitu itu singkatan "alias"), sehingga dalam kode modul yang Anda lakukan biasanya menulis sesuatu seperti ini:
let myFunc1 = function() { ... };
let myFunc2 = function() { ... };
exports.myFunc1 = myFunc1;
exports.myFunc2 = myFunc2;
untuk mengekspor (atau "mengekspos") fungsi yang dicakup secara internal myFunc1
dan myFunc2
.
Dan dalam kode panggilan Anda akan menggunakan:
const m = require('./mymodule');
m.myFunc1();
di mana baris terakhir menunjukkan bagaimana hasil dari require
(biasanya) hanya objek biasa yang propertinya dapat diakses.
NB: jika Anda menimpa exports
maka itu tidak akan lagi merujuk module.exports
. Jadi jika Anda ingin menetapkan objek baru (atau referensi fungsi) exports
maka Anda juga harus menetapkan objek baru itumodule.exports
Perlu dicatat bahwa nama yang ditambahkan ke exports
objek tidak harus sama dengan nama yang dicakup secara internal modul untuk nilai yang Anda tambahkan, sehingga Anda dapat memiliki:
let myVeryLongInternalName = function() { ... };
exports.shortName = myVeryLongInternalName;
// add other objects, functions, as required
diikuti oleh:
const m = require('./mymodule');
m.shortName(); // invokes module.myVeryLongInternalName
Ini sudah dijawab tetapi saya ingin menambahkan beberapa klarifikasi ...
Anda dapat menggunakan keduanya
exports
danmodule.exports
untuk mengimpor kode ke aplikasi Anda seperti ini:var mycode = require('./path/to/mycode');
Kasus penggunaan dasar yang akan Anda lihat (misalnya dalam kode contoh ExpressJS) adalah bahwa Anda menetapkan properti pada
exports
objek dalam file .js yang kemudian Anda impor menggunakanrequire()
Jadi, dalam contoh penghitungan sederhana, Anda dapat memiliki:
(counter.js):
... lalu di aplikasi Anda (web.js, atau benar-benar file .js lainnya):
Secara sederhana, Anda dapat menganggap file yang diperlukan sebagai fungsi yang mengembalikan satu objek, dan Anda dapat menambahkan properti (string, angka, array, fungsi, apa saja) ke objek yang dikembalikan dengan menyetelnya
exports
.Terkadang Anda ingin objek dikembalikan dari
require()
panggilan menjadi fungsi yang dapat Anda panggil, bukan hanya objek dengan properti. Dalam hal ini Anda juga perlu mengaturmodule.exports
, seperti ini:(sayhello.js):
(app.js):
Perbedaan antara ekspor dan module.exports dijelaskan lebih baik dalam jawaban ini di sini .
sumber
require
mulai relatif ke folder yang Anda jalankannode app.js
masuk. Saya sarankan Anda mengirim pertanyaan baru dengan kode eksplisit + contoh struktur folder untuk mendapatkan jawaban yang lebih jelas.var sayHello = require('./ex6_module.js'); console.log(sayHello());
dan modul:module.exports = exports = function() { return "Hello World!"; }
module.exports = exports = function(){...}
yang ke-2exports
hanyalah variabel bukan? Dengan kata lain, bisa jadimodule.exports = abc = function()
Perhatikan bahwa mekanisme modul NodeJS didasarkan pada modul CommonJS yang didukung dalam banyak implementasi lain seperti RequireJS , tetapi juga SproutCore , CouchDB , Wakanda , OrientDB , ArangoDB , RingoJS , TeaJS , TeaJS , SilkJS , curl.js , atau bahkan Adobe Photoshop (via PSLib ). Anda dapat menemukan daftar lengkap dari implementasi yang dikenal di sini .
Kecuali jika modul Anda menggunakan fitur atau modul khusus node, saya sangat menyarankan Anda untuk menggunakannya
exports
daripadamodule.exports
yang bukan merupakan bagian dari standar CommonJS , dan kemudian sebagian besar tidak didukung oleh implementasi lain.Fitur spesifik NodeJS lainnya adalah ketika Anda menetapkan referensi ke objek baru
exports
daripada hanya menambahkan properti dan metode seperti dalam contoh terakhir yang diberikan oleh Jed Watson di utas ini. Saya pribadi akan mencegah praktik ini karena ini mematahkan dukungan referensi melingkar dari mekanisme modul CommonJS. Maka tidak didukung oleh semua implementasi dan contoh Jed kemudian harus ditulis dengan cara ini (atau yang serupa) untuk memberikan modul yang lebih universal:(sayhello.js):
(app.js):
Atau menggunakan fitur ES6
(sayhello.js):
(app.js):
PS: Sepertinya Appcelerator juga mengimplementasikan modul CommonJS, tetapi tanpa dukungan referensi melingkar (lihat: modul Appcelerator dan CommonJS (caching dan referensi melingkar) )
sumber
Beberapa hal yang harus Anda perhatikan jika Anda menetapkan referensi ke objek baru ke
exports
dan / ataumodules.exports
:1. Semua properti / metode yang sebelumnya dilampirkan ke aslinya
exports
ataumodule.exports
tentu saja hilang karena objek yang diekspor sekarang akan merujuk yang baruYang ini jelas, tapi jika Anda menambahkan metode yang diekspor di awal modul yang ada, pastikan objek yang diekspor asli tidak merujuk objek lain di akhir
2. Dalam kasus salah satu
exports
ataumodule.exports
referensi nilai baru, mereka tidak merujuk ke objek yang sama lagi3. Konsekuensi rumit. Jika Anda mengubah referensi untuk keduanya
exports
danmodule.exports
, sulit untuk mengatakan API mana yang terbuka (sepertinyamodule.exports
menang)sumber
properti module.exports atau objek ekspor memungkinkan modul memilih apa yang harus dibagikan dengan aplikasi
Saya punya video di module_export tersedia di sini
sumber
Saat membagi kode program Anda ke beberapa file,
module.exports
digunakan untuk mempublikasikan variabel dan fungsi ke konsumen modul. Therequire()
panggilan dalam file sumber Anda diganti dengan yang sesuaimodule.exports
diambil dari modul.Ingat saat menulis modul
module.exports
objek juga tersedia sebagaiexports
singkatan. Tetapi ketika mengembalikan satu-satunya fungsi, selalu gunakanmodule.exports
.Menurut: "Modul Bagian 2 - Modul Menulis" .
sumber
tautan rujukannya seperti ini:
properti
exports
ataumodule.exports
, seperti fungsi atau variabel, akan diekspos di luarada sesuatu yang harus Anda perhatikan: jangan
override
ekspor.kenapa
karena mengekspor hanya referensi dari module.exports, Anda dapat menambahkan properti ke ekspor, tetapi jika Anda menimpa ekspor, tautan referensi akan rusak.
contoh yang baik :
contoh buruk:
Jika Anda hanya ingin membuka satu fungsi atau variabel, seperti ini:
modul ini hanya menampilkan satu fungsi dan properti nama bersifat pribadi untuk bagian luar.
sumber
Ada beberapa modul default atau yang ada di node.js ketika Anda mengunduh dan menginstal node.js seperti http, sys dll.
Karena mereka sudah ada di node.js, ketika kita ingin menggunakan modul-modul ini, kita pada dasarnya menyukai modul impor , tetapi mengapa? karena mereka sudah ada di node.js. Mengimpor seperti mengambilnya dari node.js dan memasukkannya ke dalam program Anda. Dan kemudian menggunakannya.
Sedangkan Ekspor adalah kebalikannya, Anda membuat modul yang Anda inginkan, katakanlah modul penambahan.js dan menempatkan modul itu ke node.js, Anda melakukannya dengan mengekspornya.
Sebelum saya menulis apa pun di sini, ingat, module.exports.additionTwo sama dengan exports.additionTwo
Hah, jadi itu alasannya, kami suka
Hati-hati dengan jalan
Katakanlah Anda telah membuat modul add.js,
Ketika Anda menjalankan ini pada command prompt NODE.JS Anda:
Ini akan keliru mengatakan
Ini karena proses node.js tidak dapat penambahan.js karena kami tidak menyebutkan path. Jadi, kita dapat mengatur jalur dengan menggunakan NODE_PATH
Sekarang, ini harus berjalan dengan sukses tanpa kesalahan !!
Satu hal lagi, Anda juga dapat menjalankan file penambahan.js dengan tidak mengatur NODE_PATH, kembali ke prompt perintah nodejs Anda:
Karena kami menyediakan path di sini dengan mengatakan itu di direktori saat
./
ini, ini juga harus berjalan dengan sukses.sumber
Modul merangkum kode terkait ke dalam satu unit kode. Saat membuat modul, ini dapat diartikan sebagai memindahkan semua fungsi terkait ke file.
Misalkan ada file Hello.js yang mencakup dua fungsi
Kami menulis fungsi hanya ketika utilitas kode lebih dari satu panggilan.
Misalkan kita ingin meningkatkan utilitas fungsi ke file lain katakanlah World.js, dalam hal ini mengekspor file menjadi gambar yang dapat diperoleh oleh module.exports.
Anda cukup mengekspor kedua fungsi dengan kode yang diberikan di bawah ini
Sekarang Anda hanya perlu meminta nama file ke World.js inorder untuk menggunakan fungsi-fungsi itu
sumber
Maksudnya adalah:
Wikipedia
Saya membayangkan menjadi sulit untuk menulis program besar tanpa kode modular / dapat digunakan kembali. Dalam nodejs kita dapat membuat program modular menggunakan
module.exports
mendefinisikan apa yang kita buat dan buat program kitarequire
.fileLog.js
stdoutLog.js
program.js
menjalankan
Sekarang coba swapping ./stdoutLog.js untuk ./fileLog.js .
sumber
Itu mencapai hal-hal berikut:
Memiliki modul membuatnya lebih mudah untuk menemukan bagian kode tertentu yang membuat kode kita lebih mudah dikelola.
NodejS
menggunakan sistem modul CommomJS yang bekerja dengan cara berikut:module.export
sintaksrequire('file')
sintaksContoh:
test1.js
test2.js
Hal lain yang berguna untuk diketahui:
require()
dipanggil pada modul yang sama dengan yang ditarik dari cache.require()
langsung.sumber
sumber
return "Hello world"
tidak ada bedanya), tetapi tanpa penjelasan apa pun. Pastikan sebelum menjawab bahwa jawaban Anda akan menambahkan sesuatu pada subjek.