Modul ialah komponen asas aplikasi Node.js dan modul berada dalam surat-menyurat satu-dengan-satu. Modul Nodejs ialah fail, dan fail ini mungkin kod JavaScript, JSON atau "C/. C", modul rujukan boleh digunakan dengan pernyataan "require('fail path')".
Persekitaran pengendalian tutorial ini: sistem Windows 7, nodejs versi 12.19.0, komputer Dell G3.
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. Dalam erti kata lain, fail Node.js ialah modul, yang mungkin kod JavaScript, JSON atau sambungan C/C yang disusun.
Untuk nodej, fail ialah modul Anda boleh mengeksport antara muka atau memerlukan modul lain untuk masuk.
// module1.js exports.func1 = function(){ console.log('func1 from module1 called'); }
modul1 menggunakan fungsi func1 sebagai antara muka akses awam modul melalui objek eksport.
//module2.js var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
modul2 memerlukan modul1 Pada masa ini, in_module1 bersamaan dengan objek eksport modul1. Apabila menggunakan in_module1 untuk memanggil func1, ia bersamaan dengan memanggil func1 melalui objek eksport modul1.
Pada masa yang sama, fungsi func2 modul2 sendiri juga berfungsi sebagai antara muka awam modul2 melalui objek eksport modul.
// module3.js var in_module2 = require('./module2.js'); in_module2.func2();
Begitu juga, modul3 memerlukan modul2 Pada masa ini, in_module2 bersamaan dengan objek eksport modul2.
Hasil yang dijalankan adalah seperti berikut:
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js func1 from module1 called rlan@rlan-LA:~/nodejs/nodetest$ node module3.js func1 from module1 called func2 from module2 called
Modul yang diperkenalkan oleh nodejs bukan sahaja mendapat antara muka awam modul, tetapi juga merujuk pernyataan lain dalam fail, seperti:
module1.js ditukar kepada
// module2.js console.log('this is in module2'); var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
modul2 memperkenalkan fungsi func1 modul1 dan melaksanakan pernyataan cetakan dalam modul1:
rlan@rlan-LA:~/nodejs/nodetest$ node module1.js this is in module1 rlan@rlan-LA:~/nodejs/nodetest$ node module2.js this is in module2 - module2 self this is in module1 - require module1 func1 from module1 called - module2 self
Sekarang, modul2 modul1 dimuatkan dan modul3 telah memuatkan modul2 Apakah yang akan berlaku jika modul3 memuatkan modul1 semula?
// module3.js var in_module1 = require('./module1.js'); var in_module2 = require('./module2.js'); in_module1.func1(); in_module2.func2();
Pada masa ini, modul3 mula-mula memuatkan modul1, kemudian modul2, dan modul2 sendiri memuatkan bahagian modul1 Hasil yang dijalankan ialah
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js this is in module1 - require module1 this is in module2 - require module2 func1 from module1 called - require module2 func1 from module1 called - module3 self func2 from module2 called - module3 self
Jika modul3 Laraskan susunan yang diperlukan. :
// module3.js var in_module2 = require('./module2.js'); var in_module1 = require('./module1.js'); in_module1.func1(); in_module2.func2();
Hasil yang sedang dijalankan ialah:
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js this is in module2 - require module2 this is in module1 - require module2 func1 from module1 called - require module2 func1 from module1 called - module3 self func2 from module2 called - module3 self
Nampaknya nodejs menggunakan beberapa mekanisme untuk memastikan modul yang sama tidak akan dimuatkan berulang kali dalam modul lain, jadi baris
this is in module1
hanya muncul sekali, walaupun nampaknya dimuatkan dua kali dalam module3.js.
Jadi, apa yang berlaku jika terdapat pemuatan gelung? Sekarang kita biarkan modul1 memerlukan modul2:
// module1.js console.log('this is in module1'); var in_module2 = require('./module2.js'); exports.func1 = function(){ console.log('func1 from module1 called'); }
// module2.js console.log('this is in module2'); var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
Hasil yang dijalankan adalah seperti berikut:
rlan@rlan-LA:~/nodejs/nodetest$ node module1.js this is in module1 this is in module2 /home/rlan/nodejs/nodetest/module2.js:4 in_module1.func1(); ^ TypeError: in_module1.func1 is not a function at Object.<anonymous> (/home/rlan/nodejs/nodetest/module2.js:4:12) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (/home/rlan/nodejs/nodetest/module1.js:3:18) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) rlan@rlan-LA:~/nodejs/nodetest$ node module2.js this is in module2 this is in module1 func1 from module1 called
nodejs nampaknya menghalang pemuatan kelakuannya sendiri Apabila menjalankan modul2, tingkah laku adalah sama dengan Hasil modul1 tidak memuatkan modul2 adalah sama, dan tiada ralat dilaporkan. Apabila menjalankan modul1, apabila saya pergi ke modul2 dan mengabaikan pernyataan memerlukan modul1, modul2 memanggil func1 modul1, dan atur cara menjadi salah.
Ringkasnya, bersarang memerlukan penyataan yang memuatkan modul berulang kali (atau memuatkan sendiri) dalam nodej tidak dapat dilaksanakan dengan betul.
[Pembelajaran yang disyorkan: "tutorial nodejs"]
Atas ialah kandungan terperinci apa itu modul nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!