Sistem modul Node.js
Untuk membolehkan fail Node.js memanggil satu sama lain, Node.js menyediakan sistem modul yang ringkas.
Modul ialah komponen asas aplikasi Node.js. Terdapat surat-menyurat satu dengan satu antara fail dan modul. Dengan kata lain, a Fail Node.js ialah modul, yang mungkin kod JavaScript, JSON atau sambungan C/C++ yang disusun.
Buat modul
Dalam Node.js, mencipta modul adalah sangat mudah Seperti berikut, kami mencipta fail 'main.js' dengan kod berikut:
var hello = require('./hello'); hello.world();
. Dalam contoh di atas , kod require('./hello') memperkenalkan fail hello.js dalam direktori semasa (./ ialah direktori semasa dan akhiran lalai node.js ialah js).
Node.js menyediakan dua objek, eksport dan memerlukan, dengan eksport ialah antara muka yang didedahkan oleh modul, dan memerlukan digunakan untuk mendapatkan antara muka modul dari luar, iaitu, objek eksport bagi modul yang diperolehi.
Seterusnya kami mencipta fail hello.js, kodnya adalah seperti berikut:
exports.world = function() { console.log('Hello World'); }
Dalam contoh di atas, hello.js menggunakan objek eksport sebagai antara muka akses modul, dalam utama .js Muatkan modul ini melalui require('./hello'), dan kemudian anda boleh mengaksesnya terus Tanya tentang fungsi ahli objek eksport dalam hello.js.
Kadang-kadang kita hanya ingin merangkum objek ke dalam modul Formatnya seperti berikut:
module.exports = function() { // ... }
Contohnya:
//hello.js function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; }; module.exports = Hello;
Dengan cara ini, anda boleh mendapatkan objek tersebut. terus:
//main.js var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();
Satu-satunya perubahan dalam antara muka modul ialah penggunaan module.exports = Hello dan bukannya exports.world = function(){}. Apabila modul dirujuk secara luaran, objek antara mukanya ialah objek Hello itu sendiri sebagai output, bukan yang asal eksport.
Di mana hendak meletakkan modul sebelah pelayan
Mungkin anda perasan bahawa kami telah menggunakan modul dalam kod. Seperti ini:
var http = require("http"); ... http.createServer(...);
Node.js disertakan dengan modul yang dipanggil "http", kami memintanya dalam kod kami dan menetapkan nilai pulangan kepada pembolehubah setempat.
Ini menjadikan pembolehubah tempatan kami menjadi objek dengan semua kaedah awam yang disediakan oleh modul http.
Strategi carian fail dalam kaedah memerlukan Node.js adalah seperti berikut:
Memandangkan terdapat 4 jenis modul (modul asli dan 3 jenis modul fail) dalam Node.js, walaupun kaedah yang diperlukan adalah sangat mudah, Walau bagaimanapun, pemuatan dalaman adalah sangat rumit, dan keutamaan pemuatannya juga berbeza. Seperti yang ditunjukkan dalam rajah di bawah:
Memuatkan daripada cache modul fail
Walaupun keutamaan modul asli dan modul fail berbeza, ia tidak akan diutamakan daripada memuatkan daripada fail modul cache.
Memuatkan daripada modul asli
Keutamaan modul asli adalah yang kedua selepas keutamaan cache modul fail. Selepas menghuraikan nama fail, kaedah memerlukan terlebih dahulu menyemak sama ada modul berada dalam senarai modul asli. Ambil modul http sebagai contoh Walaupun terdapat fail http/http.js/http.node/http.json dalam direktori, require("http") tidak akan dimuatkan daripada fail ini, tetapi daripada modul asli.
Modul asli juga mempunyai kawasan cache dan juga dimuatkan dari kawasan cache terlebih dahulu. Jika kawasan cache belum dimuatkan, kaedah pemuatan modul asli dipanggil untuk pemuatan dan pelaksanaan.
Memuatkan daripada fail
Apabila cache modul fail tidak wujud dan bukan modul asli, Node.js akan menghuraikan parameter yang diluluskan dalam kaedah memerlukan dan memuatkan modul sebenar daripada fail Sistem Fail, pembungkusan dan butiran kompilasi semasa proses pemuatan telah diperkenalkan di bahagian sebelumnya Di sini kami akan menerangkan proses mencari modul fail secara terperinci. Kaedah
require menerima parameter berikut:
http, fs, laluan, dsb., modul asli.
./mod atau ../mod, modul fail dengan laluan relatif.
/pathtomodule/mod, modul fail laluan mutlak.
mod, modul fail untuk modul bukan asli.