詳解Node.js中的模塊化方法
一、模塊化的基本概念
1、什么是模塊化
模塊化是指解決一個(gè)復(fù)雜問題時(shí),自頂向下逐層把系統(tǒng)劃分成若干模塊的過程。對(duì)于整個(gè)系統(tǒng)來說,模塊是可組合、分解和更換的單元。
編程領(lǐng)域中的模塊化
就是遵守固定的規(guī)則,把一個(gè)大文件拆成獨(dú)立并互相依賴的多個(gè)小模塊。 把代碼進(jìn)行模塊化拆分的好處:
- 提高了代碼的復(fù)用性
- 提高了代碼的可維護(hù)性
- 可以實(shí)現(xiàn)按需加載
2、模塊化規(guī)范
模塊化規(guī)范就是對(duì)代碼進(jìn)行模塊化的拆分與組合時(shí),需要遵守的那些規(guī)則。
例如:
- 使用什么樣的語法格式來引用模塊
- 在模塊中使用什么樣的語法格式向外暴露成員
模塊化規(guī)范的好處:
大家都遵守同樣的模塊化規(guī)范寫代碼,降低了溝通的成本,極大方便了各個(gè)模塊之間的相互調(diào)用,利人利己。
二、Node.js 中的模塊化
1、Node.js 中的模塊化分類
Node.js 中根據(jù)模塊來源的不同,將模塊分為了 3 大類,分別是:
內(nèi)置模塊(內(nèi)置模塊是由 Node.js 官方提供的,例如 fs、path、http 等)
自定義模塊(用戶創(chuàng)建的每個(gè) .js 文件,都是自定義模塊)
第三方模塊(由第三方開發(fā)出來的模塊,并非官方提供的內(nèi)置模塊,也不是用戶創(chuàng)建的自定義模塊,使用前需要先下載)
2、加載模塊
使用 require() 方法,可以加載需要的內(nèi)置模塊、用戶自定義模塊、第三方模塊進(jìn)行使用。
// 1、加載內(nèi)置fs模塊 const fs = require('fs') //2、加載自定義模塊 const tre = require('./tre.js') //3、加載第三方模塊 const moment=require('moment')
3、向外共享模塊作用域中的成員
module.exports 對(duì)象:
在每個(gè) .js 自定義模塊中都有一個(gè) module 對(duì)象,它里面存儲(chǔ)了和當(dāng)前模塊有關(guān)的信息。
在自定義模塊中,可以使用 module.exports 對(duì)象,將模塊內(nèi)的成員共享出去,供外界使用。
外界用 require() 方法導(dǎo)入自定義模塊時(shí),得到的就是 module.exports 所指向的對(duì)象。
4、Node.js 中的模塊化規(guī)范
(1)什么是CommonJS模塊規(guī)范
- CommonJS 是一套代碼規(guī)范, 目的是為了構(gòu)建 JavaScript 在瀏覽器之外的生態(tài)系統(tǒng) (服務(wù)器端, 桌面端).
- 通過該規(guī)范使JavaScript具備開發(fā)復(fù)雜應(yīng)用、跨平臺(tái)的能力
Node.js 遵循了 CommonJS 模塊化規(guī)范,CommonJS 規(guī)定了模塊的特性和各模塊之間如何相互依賴。
(2)CommonJS 模塊化規(guī)范
CommonJS模塊規(guī)范化的內(nèi)容 | |
---|---|
導(dǎo)出模塊: | moudle.exports 導(dǎo)出模塊 |
導(dǎo)入模塊: | require('模塊名稱') |
CommonJS 規(guī)定:
1.每個(gè)模塊內(nèi)部,module 變量代表當(dāng)前模塊。
2.module 變量是一個(gè)對(duì)象,它的 exports 屬性(即 module.exports)是對(duì)外的接口。
3.加載某個(gè)模塊,其實(shí)是加載該模塊的 module.exports 屬性。require() 方法用于加載模塊。
(3)每個(gè)導(dǎo)出的模塊都有一個(gè)moudle對(duì)象,該對(duì)象包含的屬性有:
moudle.exports: | 表示當(dāng)前模塊對(duì)外輸出的接口,其他模塊引用的是moudle.exports導(dǎo)出的變量 |
exports變量: | 指向moudle.exports,為了操作的方便,它不能直接指向一個(gè)值 |
(4)使用require導(dǎo)入模塊:導(dǎo)入并執(zhí)行一個(gè)JavaScript文件,返回的是一個(gè)exports對(duì)象,若沒有找到相應(yīng)的對(duì)象就報(bào)錯(cuò)
- 模塊輸出是一個(gè)函數(shù),則該函數(shù)的輸出接口不能用exports變量來導(dǎo)出必須用戶moudle.exports導(dǎo)出
- 加載規(guī)則:
A、用來加載js文件,默認(rèn)的文件擴(kuò)展名為.js
B、根據(jù)參數(shù)的不同格式,去不同路徑下查找相應(yīng)的js文件
'./(../)':表示加載路徑是相對(duì)路徑
'/':表示加載路徑是絕對(duì)路徑
既不是'./(../)'也不是'/':表示加載的模式是node的核心模塊,在node安裝路徑的node_modules中
- require的內(nèi)部處理的流程
require -->module.exports-->moudle._load
三、npm 與 包
1、包的概念
什么是包?
Node.js 中的第三方模塊又叫做包。 就像電腦和計(jì)算機(jī)指的是相同的東西,第三方模塊和包指的是同一個(gè)概念,只不過叫法不同。
包的來源?
不同于 Node.js 中的內(nèi)置模塊與自定義模塊,包是由第三方個(gè)人或團(tuán)隊(duì)開發(fā)出來的,免費(fèi)供所有人使用。 注意:Node.js 中的包都是免費(fèi)且開源的,不需要付費(fèi)即可免費(fèi)下載使用。
為什么需要包?
由于 Node.js 的內(nèi)置模塊僅提供了一些底層的 API,導(dǎo)致在基于內(nèi)置模塊進(jìn)行項(xiàng)目開發(fā)的時(shí),效率很低。 包是基于內(nèi)置模塊封裝出來的,提供了更高級(jí)、更方便的 API,極大的提高了開發(fā)效率。 包和內(nèi)置模塊之間的關(guān)系,類似于 jQuery 和 瀏覽器內(nèi)置 API 之間的關(guān)系。
2、包的安裝與卸載
npm 包的安裝——
npm install 包的完整名稱
npm 包的卸載——
npm uninstall 包的完整名稱
安裝指定保本的包——
默認(rèn)情況下,使用 npm install 命令安裝包的時(shí)候,會(huì)自動(dòng)安裝最新版本的包。如果需要安裝指定版本的包,可以在包名之后,通過 @ 符號(hào)指定具體的版本,例如
npm install moment@2.12.1
3、包管理配置文件
npm 規(guī)定,在項(xiàng)目根目錄中,必須提供一個(gè)叫做 package.json 的包管理配置文件。用來記錄與項(xiàng)目有關(guān)的一些配置信息。例如:
- 項(xiàng)目的名稱、版本號(hào)、描述等
- 項(xiàng)目中都用到了哪些包
- 哪些包只在開發(fā)期間會(huì)用到
- 哪些包在開發(fā)和部署時(shí)都需要用到
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
node中IO以及定時(shí)器優(yōu)先級(jí)詳解
這篇文章主要給大家介紹了關(guān)于node中IO以及定時(shí)器優(yōu)先級(jí)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05nodejs模塊nodemailer基本使用-郵件發(fā)送示例(支持附件)
本篇文章主要介紹了nodejs模塊nodemailer基本使用-郵件發(fā)送示例(支持附件),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03nodejs redis 發(fā)布訂閱機(jī)制封裝實(shí)現(xiàn)方法及實(shí)例代碼
這篇文章主要介紹了nodejs redis 發(fā)布訂閱機(jī)制封裝的相關(guān)資料,這里提供了實(shí)現(xiàn)方法,及實(shí)例代碼,具有參考價(jià)值,需要的朋友可以參考下2016-12-12Nest.js參數(shù)校驗(yàn)和自定義返回?cái)?shù)據(jù)格式詳解
這篇文章主要給大家介紹了關(guān)于Nest.js參數(shù)校驗(yàn)和自定義返回?cái)?shù)據(jù)格式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03node?NPM庫qs?iconv-lite字符串編碼轉(zhuǎn)換及解析URL查詢學(xué)習(xí)
這篇文章主要為大家介紹了node?NPM庫之qs解析URL查詢字符串及iconv-lite字符串編碼轉(zhuǎn)換學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07