国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

讀懂CommonJS的模塊加載

2024-05-06 15:40:23
字體:
來源:轉載
供稿:網友

叨叨一會CommonJS

Common這個英文單詞的意思,相信大家都認識,我記得有一個詞組common knowledge是常識的意思,那么CommonJS是不是也是類似于常識性的,大家都理解的意思呢?很明顯不是,這個常識一點都不常識。我最初認為commonJS是一個開源的JS庫,就是那種非常方便用的庫,里面都是一些常用的前端方法,然而我錯得離譜,CommonJS不僅不是一個庫,還是一個看不見摸不著的東西,他只是一個規范!就像校紀校規一樣,用來規范JS編程,束縛住前端們。就和Promise一樣是一個規范,雖然有許多實現這些規范的開源庫,但是這個規范也是可以依靠我們的JS能力實現的。

CommonJs規范

那么CommonJS規范了些什么呢?要解釋這個規范,就要從JS的特性說起了。JS是一種直譯式腳本語言,也就是一邊編譯一邊運行,所以沒有模塊的概念。因此CommonJS是為了完善JS在這方面的缺失而存在的一種規范。

CommonJS定義了兩個主要概念:

    require函數,用于導入模塊 module.exports變量,用于導出模塊

然而這兩個關鍵字,瀏覽器都不支持,所以我認為這是為什么瀏覽器不支持CommonJS的原因。如果一定腰在瀏覽器上使用CommonJs,那么就需要一些編譯庫,比如browserify來幫助哦我們將CommonJs編譯成瀏覽器支持的語法,其實就是實現require和exports。

那么CommonJS可以用于那些方面呢?雖然CommonJS不能再瀏覽器中直接使用,但是nodejs可以基于CommonJS規范而實現的,親兒子的感覺。在nodejs中我們就可以直接使用require和exports這兩個關鍵詞來實現模塊的導入和導出。

Nodejs中CommomJS模塊的實現

require

導入,代碼很簡單,let {count,addCount}=require("./utils")就可以了。那么在導入的時候發生了些什么呢??首先肯定是解析路徑,系統給我們解析出一個絕對路徑,我們寫的相對對路徑是給我們看的,絕對路徑是給系統看的,畢竟絕對路徑辣么長,看著很費力,尤其是當我們的的項目在N個文件夾之下的時候。所以require第一件事就是解析路徑。我們可以寫的很簡潔,只需要寫出相對路徑和文件名即可,連后綴都可以省略,讓require幫我們去匹配去尋找。也就是說require的第一步是解析路徑獲取到模塊內容:

如果是核心模塊,比如fs,就直接返回模塊

如果是帶有路徑的如/,./等等,則拼接出一個絕對路徑,然后先讀取緩存require.cache再讀取文件。如果沒有加后綴,則自動加后綴然后一一識別。

    .js 解析為JavaScript 文本文件 .json解析JSON對象 .node解析為二進制插件模塊

首次加載后的模塊會緩存在require.cache之中,所以多次加載require,得到的對象是同一個。

在執行模塊代碼的時候,會將模塊包裝成如下模式,以便于作用域在模塊范圍之內。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 娄底市| 汉源县| 娄底市| 江阴市| 水城县| 靖安县| 岳阳县| 连南| 宽城| 师宗县| 托克托县| 正宁县| 河东区| 乌兰浩特市| 长泰县| 青冈县| 桦川县| 嘉善县| 沧州市| 沂南县| 定兴县| 龙南县| 买车| 兰溪市| 安丘市| 老河口市| 永清县| 汾西县| 尉犁县| 米脂县| 苍溪县| 泰顺县| 平和县| 卢龙县| 丰顺县| 南京市| 旌德县| 井冈山市| 青川县| 沅江市| 双牌县|