您好,登錄后才能下訂單哦!
本篇文章為大家展示了Node.js中模塊機制的原理是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Node的模塊規范
其實模塊的定義非常簡單,主要分為模塊引用,模塊定義和模塊標識三個部分。
1)模塊引用
Node.js中存在require()方法,這個方法接受模塊標識,以此引入一個模塊的API到當前的上下文中。
2)模塊定義
既然我們可以用require()來引入模塊,那自然也可以引出模塊。Node.js提供了exports對象用于導出當前模塊的方法和變量,并且exports是唯一導出的出口。在每個模塊中,存在一個module對象,表示模塊本身,exports其實就是module的一個屬性。在Node.js中,一個文件其實就是一個模塊,將我們需要導出的方法和屬性綁定在exports對象上作為屬性就可以將該方法或屬性導出。
在另一個模塊,可以通過require()引入模塊,就可以使用導出的方法sum()。
3)模塊標識
模塊標識其實傳遞給require()方法的參數,模塊標識必須是符合駝峰命名的字符串或者以./,../開頭的路徑,引入模塊模塊標識可以省略.js后綴。
模塊的好處是將特定的方法和變量限定在特定的作用域中,使得開發者完全不必去考慮變量污染的問題。
Node.js的模塊實現
在Node.js中,有三類模塊,其中一類是Node.js提供的核心模塊,就比如上一篇說過的fs文件模塊,database數據庫模塊,還有一類是開發者自行編寫的文件模塊,就比如剛才示例的test.js模塊,第三類就是自定義模塊,這是一種特殊的文件模塊,一般是一個文件或包的形式,比如引入mysql所需的jar包。
在Node.js中引入模塊,需要經歷三步:
(1)路徑分析
對于文件模塊來說,引入時模塊標識指明了確切的文件位置,所以在路徑分析中可以省略大量時間,加載速度僅次于核心模塊。
自定義模塊則是會從項目根目錄逐個比較路徑,直到找到目標模塊為止。所以,自定義模塊的路徑越深,路徑分析的耗時越多,所以自定義模塊的加載速度是最慢的。
(2)文件定位
剛才其實說過了,模塊標識可以不包含后綴名,所以Node.js在文件定位時會依次補充.js,.json,.node后綴名,然后去進行文件定位,因為Node.js是單線程,所以文件定位時會發生堵塞,所以如果引入的模塊后綴是.json或者.node,可以在引入的時候加上后綴,可以提高查找速度。
(3)編譯執行
定義到具體文件后,Node.js會創建一個模塊對象,然后將模塊引入并且編譯。每一個編譯成功的模塊其文件路徑都會作為索引緩存在緩存對象上,以提高二次引入模塊的性能。
核心模塊在Node.js源代碼的編譯過程中,直接被編譯成二進制文件,然后被直接加載到內存中,所以核心模塊引入時,文件定位和編譯執行這兩個步驟可以直接跳過,并且核心模塊在路徑分析中會被優先判斷,所以核心模塊的加載速度是最快的。
文件模塊則是在執行時動態加載,所以路徑分析,文件定位以及編譯執行這三個步驟都不可省略,所以加載速度比核心模塊慢。
Node.js對引入過的模塊會進行緩存,以減少二次引入模塊的性能開銷二次加載模塊一律采用緩存優先方式。核心模塊的緩存檢查優先于文件模塊。
包管理工具NPM
剛才說到Node模塊,但是雖然我們可以引用模塊,但是模塊與模塊之間仍然是散列在各地的,相互之間并不能直接引用。而Node的包管理工具NPM則將模塊相互聯系起來。包其實是在模塊的基礎上進一步組織JavaScript代碼。
其實NPM會有一個包描述文件package.json,一般位于包的根目錄, NPM的所有行為都與包描述文件息息相關。前面幾篇有講過NPM作為默認包管理工具,會作為Node環境被一起安裝。
NPM常用功能
NPM幫助Node完成了第三方模塊的發布,安裝和依賴。因為有NPM的存在,Node和第三方模塊之間形成了很好的一個生態系統,而且逐漸越來越強大。接下來大致講解下幾個NPM常見命令
npm --version 查看當前NPM的版本
npm 查看幫助說明
npm help 查看具體命令說明
執行命令會在瀏覽器中打開對應命令的說明文檔
npm install 安裝依賴包,默認使用–-save參數,即默認添加到package.json中
執行該命令,NPM會在當前目錄創建node_modules目錄,然后再node_modules創建對應依賴包的目錄,然后將依賴包解壓到該目錄。
npm init 在此目錄初始化生成package.json文件
7.npm uninstall <package> 卸載依賴包, 默認使用-–save參數,即從package.json中移除
8.npm ls查看當前目錄的依賴包
9.npm root -g 查看全局安裝地址
10.npm list <package>查看依賴的當前版本
NPM存在的問題
在NPM平臺,每個人都可以分享包,所以包質量沒有辦法保證,而且Node.js運行在服務端,所以需要考慮安全問題。所以一個優秀的模塊需要符合幾大模塊:
(1)具備良好的測試
(2)具備良好的文檔
(3)具備良好的測試覆蓋率
(4)具備良好的代碼規范
上述內容就是Node.js中模塊機制的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。