一、目標(biāo)
- 能夠說出模塊化的好處
- 能夠知道CommonJS規(guī)定了哪些內(nèi)容
- 能夠說出Node.js中模塊的三大分類各自是什么
- 能夠使用npm管理包
- 能夠了解什么是規(guī)范的包結(jié)構(gòu)
- 能夠了解模塊的加載機制
二、目錄
- 模塊化的基本概念
- Node.js中模塊的分類
- npm與包
- 模塊的加載機制
1.模塊化的基本概念
1.1什么是模塊化
模塊化是指解決一個復(fù)雜問題時,自頂向下逐層把系統(tǒng)劃分成若干模塊的過程。對于整個系統(tǒng)來說,模塊式可組合、可分解和更換的單元。
1.現(xiàn)實生活中的模塊化
?2.編程領(lǐng)域中的模塊化
編程領(lǐng)域中的模塊化,就是遵守固定的規(guī)則,把一個大文件拆成獨立并互相依賴的多個小模塊
?1.2模塊化規(guī)范
?2.Node.js中的模塊化
2.1Node.js中模塊的分類
Node.js中根據(jù)模塊來源不同,將模塊分為3大類,分別是:
- 內(nèi)置模塊(內(nèi)置模塊是由Node.js官方提供的,例如fs、path、http等)
- 自定義模塊(用戶創(chuàng)建的每個.js文件,都是自定義模塊)
- 第三方模塊(由第三方開發(fā)出來的模塊,并非官方提供的內(nèi)置模塊,也不是用戶創(chuàng)建的自定義模塊,使用前需要先下載)
2.2加載模塊
使用強大的require()方法,可以加載需要的內(nèi)置模塊、用戶自定義模塊、第三方模塊進行使用。例如:
?注意:①使用require()方法加載其他模塊時,會執(zhí)行被加載模塊中的代碼。
②在使用require加載用戶自定義模塊期間,可以省略.js的后綴名
2.3Node.js中的模塊作用域
1.什么是模塊作用域
和函數(shù)作用域類似,在自定義模塊中定義的變量、方法等成員,只能在當(dāng)前模塊內(nèi)被訪問,這種模塊級別的訪問限制,叫做模塊作用域。
2.模塊作用域的好處
?2.4向外共享模塊作用域中的成員
1.module對象
在每個.js自定義模塊中都有一個moudule對象,它里面存儲了和當(dāng)前模塊有關(guān)的信心,打印如下:
2.module.exports對象
在自定義模塊中,可以使用module.exports對象,將模塊內(nèi)的成員共享出去,供外界使用。
外界用require()方法導(dǎo)入自定義模塊時,得到的就是module.exports所指的對象?
//在一個自定義模塊中,默認(rèn)情況下,module。exports={}
//向module.exports對象上掛栽username屬性
module.exports.username = 'zs'
//向module.exports對象上掛栽sayHello方法
module.exports.sayHello = function() {
console.log('大家好,我是' + username)
}
//在外界使用require導(dǎo)入一個自定義模塊的時候,得到的成員,
//就是那個模塊中,通過module.exports指向的那個對象
const m1 = require('./06.mi')
console.log(m1)
3.共享成員時的注意點
?4.exports對象
由于module.exports單詞寫起來比較復(fù)雜,為了簡化向外共享成員的代碼,Node提供了exports對象。默認(rèn)情況下,exports和module.exports指向同一個對象。最終共享的結(jié)果,還是以module.exports指向的對象為準(zhǔn)。
?最終,向外共享的結(jié)果,永遠都是module.exports所指向的對象
4.exports和module.exports的使用誤區(qū)
時刻謹(jǐn)記,require()模塊時,得到的永遠是module.exports指向的對象:
如果給module.exports賦值一個新對象,則會以最后復(fù)制的新對象為主(因為module.export本身就是一個對象,賦值一個新對象覆蓋了本身的對象);如果給module.export賦值一個屬性,則會加入到本身對象里面;永遠以module.export所賦值為主;
?
?
?
?注意:為了防止混亂,建議大家不要在同一個模塊中同時使用exports和module.exports
2.5 Node,js中的模塊化規(guī)范
Node,js遵循了CommonJS模塊化規(guī)范,CommonJS規(guī)定了模塊的特性和各模塊之間如何相互依賴。
CommonJS規(guī)定:
①每個模塊內(nèi)部,module變量代表當(dāng)前模塊
②module變量是一個對象,它的exports屬性(即module.exports)是對外的接口文章來源:http://www.zghlxwxcb.cn/news/detail-463510.html
③加載某個模塊,其實是加載該模塊的module.exports屬性。require()方法用于加載模塊。文章來源地址http://www.zghlxwxcb.cn/news/detail-463510.html
到了這里,關(guān)于模塊化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!