Rumah > Artikel > hujung hadapan web > Sembang mendalam tentang modularisasi dalam Node.js
Apakah itu modulariti? Artikel ini akan membawa anda melalui modularisasi dalam Nod dan memperkenalkan mekanisme pemuatan modul saya harap ia akan membantu anda!
1.1 Apakah itu modulariti
Modularisasi merujuk kepada proses membahagikan sistem kepada beberapa modul lapisan demi lapisan dari atas ke bawah apabila menyelesaikan masalah yang kompleks. Untuk keseluruhan sistem, modul ialah unit yang boleh digabungkan, diurai dan diganti.
Pemodularan dalam bidang pengaturcaraan adalah mengikut peraturan tetap dan membahagikan fail besar kepada beberapa modul kecil yang bebas dan saling bergantung.
Faedah memodulasi kod:
Kebolehgunaan semula kod yang lebih baik
Kebolehgunaan semula kod yang dipertingkatkan Kebolehselenggaraan
boleh merealisasikan pemuatan atas permintaan
2.1 Pengelasan modul dalam modul Node.js
Node.js dibahagikan kepada 3 kategori utama berdasarkan sumbernya yang berbeza, iaitu:
Dibina modul -dalam (modul terbina dalam disediakan secara rasmi oleh Node.js, seperti fs, laluan, http, dll.)
Modul tersuai ( Setiap fail .js yang dibuat oleh pengguna ialah modul tersuai)
Modul pihak ketiga (modul yang dibangunkan oleh pihak ketiga tidak disediakan secara rasmi modul terbina dalam, mahupun dicipta oleh pengguna Modul tersuai perlu dimuat turun sebelum digunakan )
2.2 Memuatkan modul
Gunakan kaedah require() yang berkuasa untuk memuatkan yang diperlukan Gunakan modul terbina dalam, modul yang ditentukan pengguna, dan modul pihak ketiga. Contohnya:
Nota: Apabila menggunakan kaedah require() untuk memuatkan modul lain, kod dalam modul yang dimuatkan akan dilaksanakan; Akhiran fail '.js' boleh ditinggalkan semasa memuatkan modul tersuai.
2.3 Skop modul dalam Node.js
Apakah itu skop modul
Serupa dengan fungsi skop, pembolehubah, kaedah dan ahli lain yang ditakrifkan dalam modul tersuai hanya boleh diakses dalam modul semasa Sekatan akses peringkat modul ini dipanggil skop modul.
Faedah skop modul
Menghalang masalah pencemaran berubah global (jika anda menggunakan tag skrip untuk mengimport dua fail js dan dua fail Jika pembolehubah yang sama ditakrifkan dalam kedua-duanya, yang pertama akan ditimpa oleh yang terakhir)
2.4 Berkongsi ahli dalam skop modul ke luar
1 🎜>
Terdapat objek modul dalam setiap modul tersuai .js, yang menyimpan maklumat yang berkaitan dengan modul semasa Ia dicetak seperti berikut: 2 , modul. .exports object Dalam modul tersuai, anda boleh menggunakan objek module.exports untuk berkongsi ahli dalam modul untuk kegunaan luaran. Apabila dunia luar menggunakan kaedah require() untuk mengimport modul tersuai, perkara yang anda dapat ialah objek yang ditunjuk oleh module.exports. 3 Perkara yang perlu diambil perhatian apabila berkongsi ahli Apabila menggunakan kaedah require() untuk mengimport modul, hasil import akan sentiasa berdasarkan objek yang ditunjukkan oleh module.exports. 4. mengeksport objek Memandangkan modul.exports perkataan adalah rumit untuk ditulis, untuk memudahkan kod untuk berkongsi ahli secara luaran, Node menyediakan objek eksport. Secara lalai, eksport dan module.exports menghala ke objek yang sama. Hasil perkongsian akhir masih berdasarkan objek yang ditunjukkan oleh module.exports. 5 Salah faham dalam penggunaan eksport dan modul.eksport Sentiasa ingat bahawa apabila memerlukan() modul, apa yang anda perolehi ialah modul yang anda perolehi. .eksport menunjuk kepada. Hanya dengan memasang data, ia masih menunjuk ke objek yang sama Data yang dipasang melalui eksport juga boleh diperolehi oleh modul yang diperlukan. Jika satu pihak memberikan nilai (menunjuk ke objek lain, maka mereka tidak menunjuk ke objek yang sama, dan modul memerlukan mendapat objek yang ditunjuk oleh module.exports, jadi apabila satu pihak menukar penunjuk, modul yang diperlukan tidak akan mendapat nilai eksport.)Nota: Untuk mengelakkan kekeliruan, adalah disyorkan agar anda tidak menggunakan eksport dan modul.eksport pada masa yang sama dalam modul yang sama
2.5 Spesifikasi modular dalam Node.jsPeraturan CommonJS:Node .js mengikut spesifikasi modularisasi CommonJS, yang menentukan ciri modul dan cara modul bergantung antara satu sama lain.
(1) Di dalam setiap modul, pembolehubah modul mewakili modul semasa.
(2) Pembolehubah modul ialah objek, dan atribut eksportnya (iaitu modul.eksport) ialah antara muka luaran.
(3) Memuatkan modul sebenarnya memuatkan atribut module.exports modul. kaedah require() digunakan untuk memuatkan modul.
3.1 Pakej
1. Apakah itu pakej? .js Juga dipanggil beg.
Sama seperti komputer dan komputer merujuk kepada perkara yang sama, modul dan pakej pihak ketiga merujuk kepada konsep yang sama, tetapi dengan nama yang berbeza.
2. Sumber pakej
Berbeza daripada modul terbina dalam dan modul tersuai dalam Node.js, pakej dibangunkan oleh individu atau pasukan pihak ketiga dan percuma untuk digunakan oleh semua orang.
Nota: Pakej dalam Node.js semuanya percuma dan sumber terbuka, serta boleh dimuat turun dan digunakan secara percuma tanpa perlu membayar.
3 Mengapa pakej diperlukan
Memandangkan modul terbina dalam Node.js hanya menyediakan beberapa API peringkat rendah, kecekapan pembangunan projek berdasarkan modul terbina dalam adalah sangat rendah. .
Pakej ini dirangkumkan berdasarkan modul terbina dalam, menyediakan API yang lebih maju dan mudah, yang meningkatkan kecekapan pembangunan.
Hubungan antara pakej dan modul terbina dalam adalah serupa dengan hubungan antara jQuery dan API penyemak imbas terbina dalam.
4. Di mana untuk memuat turun pakej
Terdapat syarikat IT di luar negara bernama npm, Inc. Syarikat ini mempunyai laman web yang sangat terkenal:
www.npmjs.com/, ia adalah platform perkongsian pakej terbesar di dunia Anda boleh mencari mana-mana pakej yang anda perlukan dari laman web ini, selagi anda mempunyai kesabaran yang mencukupi! Sehingga kini, lebih 11 juta pembangun di seluruh dunia telah membangun dan berkongsi lebih daripada 1.2 juta pakej untuk kegunaan kami melalui platform perkongsian pakej ini. npm, Inc. menyediakan pelayan di alamat
registry.npmjs.org/untuk berkongsi semua pakej secara luaran. Kami boleh memuat turun pakej yang kami perlukan dari pelayan ini. Nota:
Cari pakej yang anda perlukan dari
www.npmjs.com/registry.npmjs.org /Muat turun pakej yang anda perlukan dari pelayan 5. Bagaimana untuk memuat turun pakej
npm, Inc. menyediakan alat pengurusan pakej kami boleh menggunakan alat pengurusan pakej ini daripada
registry.npmjs.org/Pelayan memuat turun pakej yang diperlukan untuk kegunaan tempatan. Nama alat pengurusan pakej ini ialah Pengurus Pakej Node (dirujuk sebagai alat pengurusan pakej npm ini dipasang pada komputer pengguna bersama-sama dengan pakej pemasangan Node.js).
Anda boleh melaksanakan perintah npm -v dalam terminal untuk menyemak nombor versi alat pengurusan pakej npm yang dipasang pada komputer anda:
3.2 Pengalaman pertama dengan npm1 Perintah untuk memasang pakej dalam projek
Jika anda ingin memasang pakej dengan nama yang ditentukan dalam projek, anda perlu menjalankannya. arahan berikut:
Arahan pembungkusan di atas boleh dipendekkan ke dalam format berikut:npm install 包的完整名称2. Apakah fail tambahan yang ditambahkan selepas pembungkusan awal? >Selepas pembungkusan awal selesai, dalam projek Terdapat folder tambahan yang dipanggil node_modules dan fail konfigurasi package-lock.json di bawah folder.
npm i 包的完整名称
Antaranya: Folder node_modules digunakan untuk menyimpan semua pakej yang telah dipasang dalam projek. Apabila require() mengimport pakej pihak ketiga, ia mencari dan memuatkan pakej dari direktori ini.
Fail konfigurasi package-lock.json digunakan untuk merekodkan maklumat muat turun setiap pakej dalam direktori node_modules, seperti nama pakej, nombor versi, alamat muat turun, dsb.
Nota: Pengaturcara tidak boleh mengubah suai mana-mana kod secara manual dalam fail node_modules atau package-lock.json, alat pengurusan pakej npm akan mengekalkannya secara automatik.
3 Pasang versi pakej yang ditentukan
Secara lalai, apabila anda menggunakan arahan pemasangan npm untuk memasang pakej, versi terkini pakej akan dipasang secara automatik. Jika anda perlu memasang pakej versi tertentu, anda boleh menentukan versi tertentu melalui simbol @ selepas nama pakej, contohnya:
4. Spesifikasi versi semantik pakejVersi pakej Nombor ditakrifkan dalam bentuk "perpuluhan bertitik", dengan jumlah tiga digit, contohnya, 2.24.0
npm i moment@2.22.2
Maksud setiap digit adalah seperti berikut:
第1位数字:大版本
第2位数字:功能版本
第3位数字:Bug修复版本
版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。
3.3 包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。例如:
项目的名称、版本号、描述等
项目中都用到了哪些包
哪些包只在开发期间会用到
那些包在开发和部署时都需要用到
1、多人协作的问题
遇到的问题:第三方包的体积过大,不方便团队成员之间共享项目源代码。
解决方案:共享时剔除node_modules
2、如何记录项目中安装了哪些包
在项目根目录中,创建一个叫做 package.json 的配置文件,即可用来记录项目中安装了哪些包。从而方便剔除 node_modules 目录之后,在团队成员之间共享项目的源代码。
注意:今后在项目开发中,一定要把 node_modules 文件夹,添加到 .gitignore 忽略文件中。
3、快速创建 package.json
npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json 这个包管理配置文件:
npm init -y
注意:
(1)上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
(2)@运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中。
4、dependencies 节点
package.json 文件中,有一个 dependencies 节点,专门用来记录您使用 npm install 命令安装了哪些包。
5、一次性安装所有的包
当我们拿到一个剔除了 node_modules 的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来。 否则会报类似于下面的错误:
可以运行 npm install 命令(或 npm i)一次性安装所有的依赖包:
6、卸载包
可以运行 npm uninstall 命令,来卸载指定的包:
npm uninstall 具体的包名
注意:npm uninstall 命令执行成功后,会把卸载的包,自动从 package.json 的 dependencies 中移除掉。卸载没有简写。
7、devDependencies 节点
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。
与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。
您可以使用如下的命令,将包记录到 devDependencies 节点中:
3.4 解决下包速度慢的问题
1、为什么下包速度慢
在使用 npm 下包的时候,默认从国外的 registry.npmjs.org/ 服务器进行下载,因此下包速度会很慢。
2、淘宝 NPM 镜像服务器
淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务。从而极大的提高了下包的速度。
扩展: 镜像(Mirroring)是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
3、切换 npm 的下包镜像源
下包的镜像源,指的就是下包的服务器地址。
4、nrm
为了更方便的切换下包的镜像源,我们可以安装 nrm 这个小工具,利用 nrm 提供的终端命令,可以快速查看和切换下包的镜像源。
3.5 包的分类
使用 npm 包管理工具下载的包,共分为两大类,分别是:
项目包
全局包
1、项目包
那些被安装到项目的 node_modules 目录中的包,都是项目包。
项目包又分为两类,分别是:
Pakej pergantungan pembangunan (pakej yang direkodkan dalam nod devDependencies, hanya digunakan semasa pembangunan)
Pakej pergantungan teras (dirakam dalam kebergantungan Pakej dalam nod akan digunakan semasa pembangunan dan selepas projek berjalan dalam talian)
2. Pakej global Apabila melaksanakan arahan pemasangan npm, jika parameter -g disediakan, pakej akan dipasang sebagai pakej global.
Pakej global akan dipasang dalam direktori pengguna C:Users direktori AppDataRoamingnpmnode_modules.
Nota:
(1) Hanya pakej alat perlu dipasang secara global. Kerana mereka menyediakan arahan terminal yang berguna.
(2) Untuk menentukan sama ada pakej perlu dipasang secara global sebelum ia boleh digunakan, anda boleh merujuk kepada arahan rasmi untuk digunakan.
3. i5ting_toc
i5ting_toc ialah alat kecil yang boleh menukar dokumen md menjadi halaman html:
3.6 Struktur pakej standard
Selepas menjelaskan konsep pakej dan cara memuat turun dan menggunakannya, seterusnya, mari kita lihat dengan lebih mendalam struktur dalaman pakej.
Pakej standard mesti memenuhi tiga keperluan berikut:
(1) Pakej mesti wujud dalam direktori berasingan
(2) Pakej Direktori peringkat atas mesti mengandungi package.json, fail konfigurasi pengurusan pakej
(3) package.json mesti mengandungi tiga nama atribut, versi dan utama, yang masing-masing mewakili nama, nombor versi dan nama pakej masuk .
Nota: Tiga keperluan di atas adalah format yang mesti dipatuhi oleh struktur pakej standard Untuk lebih banyak kekangan, sila rujuk URL berikut: https://yarnpkg.com/zh-Hans/docs/package. - json
3.7 Bangunkan pakej anda sendiri
1. Mulakan struktur asas pakej
(1) Cipta folder ithima-tools baharu sebagai Direktori akar pakej
(2) Dalam folder itheima-tools, cipta tiga fail berikut:
package.json (fail konfigurasi pengurusan pakej)
index.js (fail kemasukan pakej)
README.md (dokumen penerangan pakej)
2. Pakej permulaan.json
Nota: nama—digunakan untuk memberitahu nama aplikasi atau versi perisian—menunjukkan versi semasa; utama —Menetapkan titik masuk aplikasi ialah penerangan ringkas bagi kata kunci aplikasi/perisian—atribut ini mengandungi susunan kata kunci yang berkaitan dengan fungsi pakej perisian (membantu menyemak imbas rasmi nod; laman web untuk mencari pakej perisian);
3. Tulis dokumentasi pakej
Fail README.md dalam direktori akar pakej ialah dokumentasi penggunaan pakej. Melaluinya, kita boleh menulis arahan penggunaan pakej dalam format markdown terlebih dahulu untuk kemudahan pengguna.
Tiada keperluan mandatori untuk apa yang hendak ditulis dalam fail README selagi fungsi, penggunaan, langkah berjaga-jaga, dsb. pakej boleh diterangkan dengan jelas.
Pakej Keluaran 3.8
1 Daftar akaun npm
(1) Lawati laman web www.npmjs.com/, klik butang daftar untuk. masukkan antara muka pengguna Pendaftaran
(2) Isikan maklumat berkaitan akaun: Nama Penuh, E-mel Awam, Nama Pengguna, Kata Laluan
(3) Klik butang Buat Akaun untuk mendaftar akaun
(4) Log masuk ke e-mel anda dan klik pautan pengesahan untuk mengesahkan akaun
2. Log masuk ke akaun npm
Selepas pendaftaran akaun npm selesai, anda boleh melaksanakan arahan log masuk npm di terminal dan masukkan nama pengguna mengikut urutan , kata laluan (kata laluan tersembunyi dan tidak dapat dilihat, hanya masukkannya dengan betul dan tekan Enter), e-mel, dan kod OTP yang dihantar ke e-mel, anda boleh log masuk dengan jayanya.
Nota: Sebelum menjalankan arahan log masuk npm, anda mesti menukar alamat pelayan pakej kepada pelayan rasmi npm terlebih dahulu. (Jika anda menggunakan pelayan taobao sebelum ini, anda mesti bertukar kepada pelayan rasmi npm) Jika tidak, penerbitan pakej akan gagal!
3 Terbitkan pakej ke npm
Selepas menukar terminal ke direktori akar pakej, jalankan arahan npm publish untuk menerbitkan pakej ke npm (nota: nama pakej tidak boleh sama, anda boleh pergi ke laman web rasmi untuk menyemak sama ada terdapat pakej dengan nama yang sama).
4. Padamkan pakej yang diterbitkan
Jalankan perintah npm unpublish package name --force untuk memadamkan pakej yang diterbitkan daripada npm.
Nota:
(1) Arahan npm unpublish hanya boleh memadamkan pakej yang diterbitkan dalam masa 72 jam
(2) Pakej yang dipadamkan oleh npm unpublish tidak dibenarkan dalam masa 24 jam Diulang penerbitan
(3) Berhati-hati semasa menerbitkan pakej, dan cuba untuk tidak menerbitkan pakej yang tidak bermakna kepada npm!
4.1 Utamakan pemuatan daripada cache
Modul akan dicache selepas pemuatan pertama. Ini juga bermakna panggilan memerlukan() beberapa kali tidak akan menyebabkan kod modul dilaksanakan beberapa kali.
Nota: Sama ada modul terbina dalam, modul yang ditentukan pengguna atau modul pihak ketiga, ia akan dimuatkan daripada cache terlebih dahulu, dengan itu meningkatkan kecekapan pemuatan modul .
4.2 Mekanisme pemuatan modul terbina dalam
Modul terbina dalam ialah modul yang disediakan secara rasmi oleh Node.js, dan modul terbina dalam mempunyai keutamaan pemuatan tertinggi.
Contohnya: require('fs') sentiasa mengembalikan modul fs terbina dalam, walaupun terdapat pakej dengan nama yang sama dalam direktori node_modules yang dipanggil fs.
4.3 Mekanisme pemuatan modul tersuai
Apabila menggunakan require() untuk memuatkan modul tersuai, anda mesti menentukan pengecam laluan bermula dengan ./ atau ../. Apabila memuatkan modul tersuai, jika tiada pengecam laluan seperti ./ atau ../ ditentukan, nod akan memuatkannya sebagai modul terbina dalam atau modul pihak ketiga.
Pada masa yang sama, apabila menggunakan require() untuk mengimport modul tersuai, jika sambungan fail ditinggalkan, Node.js akan cuba memuatkan fail berikut mengikut urutan:
(1 ) Muatkan mengikut nama fail yang tepat
(2) Lengkapkan sambungan .js untuk memuatkan
(3) Lengkapkan sambungan .json untuk memuatkan
(4) Lengkapkan sambungan .nod untuk memuatkan
(5) Pemuatan gagal dan terminal melaporkan ralat
4.4 Mekanisme pemuatan modul pihak ketiga
Jika dihantar ke Pengecam modul require() bukan modul terbina dalam, dan ia juga tidak bermula dengan './' atau '../', kemudian Node.js akan bermula dari direktori induk modul semasa dan cuba untuk muatkan pihak ketiga daripada modul folder /node_modules.
Jika modul pihak ketiga yang sepadan tidak ditemui, alihkan ke direktori induk satu tahap di atas dan muatkannya sehingga direktori akar sistem fail.
Sebagai contoh, dengan mengandaikan require('tools') dipanggil dalam fail 'C:Usersitheimaprojectfoo.js', Node.js akan mencari dalam susunan berikut:
(1) C: Usersitheimaprojectnode_modulestools
(2) C:Usersitheimanode_modulestools
(3) C:Usersnode_modulestools
(4) C:node_modulestools
modulestools
Apabila menghantar direktori sebagai pengecam modul kepada memerlukan() untuk memuatkan, terdapat tiga kaedah pemuatan:
(1) Cari pakej yang dipanggil pakej dalam direktori yang dimuatkan .json fail, dan cari atribut utama sebagai entri dimuatkan oleh require()
(2) Jika tiada fail package.json dalam direktori, atau entri utama tidak wujud atau tidak boleh dihuraikan, Node .js akan Cuba memuatkan fail index.js dalam direktori.
(3) Jika dua langkah di atas gagal, Node.js akan mencetak mesej ralat dalam terminal, melaporkan modul yang hilang: Ralat: Tidak dapat mencari modul 'xxx'
Artikel ini diterbitkan semula daripada: https://juejin.cn/post/7083445004240158757
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Sembang mendalam tentang modularisasi dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!