javascript
CommonJS概述及使用
在web開發中,我們的js文件都是在html文件中引入,在瀏覽器環境運行。但是在nodejs的環境中可沒有html文件,且nodejs中,有且只有一個入口文件index.js(在執行程序時,我們只運行這一文件),別的文件均作為模塊,配合入口文件實現代碼效果。因此可以看出,nodejs對模塊化開發的需求比瀏覽器端要大得多。
目錄
1.概述
2.模塊的導出
3.模塊的導入
4.CommonJS規范
5.nodejs對CommonJS的實現
1.概述
有了這一需求,且彼時nodejs剛剛發布,前端沒有官方的模塊化標準,因此大家選擇了社區提供的CommonJS作為模塊化標準。在這里有兩個非常重要的概念:模塊的導出和模塊的導入。
2.模塊的導出
先來解釋一下什么是模塊,所謂模塊其實本質上就是一個JS文件,該文件實現了一定的功能,并在隱藏自己內部實現的情況下,提供了一些接口給其他模塊使用。這里可以類比一些API,比如數組方法push,我們并不知道它內部怎么實現將元素放入數組的最后一項,可以認為這一部分被開發者隱藏了,但是我們可以使用它,即它暴露了接口給用戶。
由模塊的這一特性我們可以知道,模塊有兩個核心要素,即:隱藏和暴露。模塊隱藏的是自己的內部實現,暴露的是希望外部使用的接口。舉個例子,我們將汽車生產場看作一個模塊,其產出的汽車是暴露給用戶的接口,而生產過程則是隱藏的內部實現,生產商只把產出的汽車賣給客戶,但是不會將生產過程告訴客戶。任何一個正常的模塊化標準,都應該默認隱藏模塊中的所有實現,而通過一些語法或API調用來暴露接口
暴露接口的過程即模塊的導出
模塊的導出3.模塊的導入
當通過某種語法或API去使用一個模塊時,這個過程叫做模塊的導入,注意的是,在使用某一模塊時,我們使用的是該模塊導出的部分,隱藏的部分是永遠無法使用的。
4.CommonJS規范
CommonJS導出模塊的方法是exports,導入模塊的是require,具體規范如下
1)如果一個JS文件中存在exports或require,該JS文件是一個模塊
2)模塊內的所有代碼均為隱藏代碼,包括全局變量、全局函數,這些全局的內容均不應該對全局變量造成任何污染
3)如果一個模塊需要暴露一些API提供給外部使用,需要通過exports導出,exports是一個空的對象,你可以為該對象添加任何需要導出的內容
4)如果一個模塊需要導入其他模塊,通過require實現,require是一個函數,傳入模塊的路徑即可返回該模塊導出的整個內容
【注】CommonJS只是一個規范,相當于告訴你按什么標準制造汽車,但是具體怎么制造還是得看生產商。因此,有了規范以后,nodejs就去實現模塊化了
5.nodejs對CommonJS的實現
為了實現CommonJS規范,nodejs對模塊做出了以下處理
1)為了保證高效的執行,僅加載必要的模塊。nedejs只有執行到require函數時才會加載并執行模塊
2)為了隱藏模塊中的代碼,nodejs執行模塊函數時,會將模塊中的所有代碼放置到一個函數塊中執行,以保證不污染全局變量
3)為了保證順利的導出模塊的內容,nodejs做了以下處理
- 在模塊開始執行前,初始化一個module.exports = {};
- module.exports即模塊的導出值
- 為了方便開發者便捷的導出,nodejs在初始化完module.exports后,又聲明了一個變量exports=module.exports?
4)為了避免反復加載同一個模塊,modejs默認開啟了模塊緩存,如果加載的模塊已經被加載過了,則會自動使用之前的導出結果
【注】CommonJS的概念如上,例子已上傳,一個是基本使用,另一個是模擬撲克牌發牌的過程
?
總結
以上是生活随笔為你收集整理的CommonJS概述及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript模块化不算漫长的发展
- 下一篇: Matlab的数组的小知识和方法