詳解Node.js中的模塊化方法
一、模塊化的基本概念
1、什麼是模塊化
模塊化是指解決一個復雜問題時,自頂向下逐層把系統劃分成若幹模塊的過程。對於整個系統來說,模塊是可組合、分解和更換的單元。
編程領域中的模塊化
就是遵守固定的規則,把一個大文件拆成獨立並互相依賴的多個小模塊。 把代碼進行模塊化拆分的好處:
- 提高瞭代碼的復用性
- 提高瞭代碼的可維護性
- 可以實現按需加載
2、模塊化規范
模塊化規范就是對代碼進行模塊化的拆分與組合時,需要遵守的那些規則。
例如:
- 使用什麼樣的語法格式來引用模塊
- 在模塊中使用什麼樣的語法格式向外暴露成員
模塊化規范的好處:
大傢都遵守同樣的模塊化規范寫代碼,降低瞭溝通的成本,極大方便瞭各個模塊之間的相互調用,利人利己。
二、Node.js 中的模塊化
1、Node.js 中的模塊化分類
Node.js 中根據模塊來源的不同,將模塊分為瞭 3 大類,分別是:
內置模塊(內置模塊是由 Node.js 官方提供的,例如 fs、path、http 等)
自定義模塊(用戶創建的每個 .js 文件,都是自定義模塊)
第三方模塊(由第三方開發出來的模塊,並非官方提供的內置模塊,也不是用戶創建的自定義模塊,使用前需要先下載)
2、加載模塊
使用 require() 方法,可以加載需要的內置模塊、用戶自定義模塊、第三方模塊進行使用。
// 1、加載內置fs模塊 const fs = require('fs') //2、加載自定義模塊 const tre = require('./tre.js') //3、加載第三方模塊 const moment=require('moment')
3、向外共享模塊作用域中的成員
module.exports 對象:
在每個 .js 自定義模塊中都有一個 module 對象,它裡面存儲瞭和當前模塊有關的信息。
在自定義模塊中,可以使用 module.exports 對象,將模塊內的成員共享出去,供外界使用。
外界用 require() 方法導入自定義模塊時,得到的就是 module.exports 所指向的對象。
4、Node.js 中的模塊化規范
(1)什麼是CommonJS模塊規范
- CommonJS 是一套代碼規范, 目的是為瞭構建 JavaScript 在瀏覽器之外的生態系統 (服務器端, 桌面端).
- 通過該規范使JavaScript具備開發復雜應用、跨平臺的能力
Node.js 遵循瞭 CommonJS 模塊化規范,CommonJS 規定瞭模塊的特性和各模塊之間如何相互依賴。
(2)CommonJS 模塊化規范
CommonJS模塊規范化的內容 | |
---|---|
導出模塊: | moudle.exports 導出模塊 |
導入模塊: | require('模塊名稱') |
CommonJS 規定:
1.每個模塊內部,module 變量代表當前模塊。
2.module 變量是一個對象,它的 exports 屬性(即 module.exports)是對外的接口。
3.加載某個模塊,其實是加載該模塊的 module.exports 屬性。require() 方法用於加載模塊。
(3)每個導出的模塊都有一個moudle對象,該對象包含的屬性有:
moudle.exports: | 表示當前模塊對外輸出的接口,其他模塊引用的是moudle.exports導出的變量 |
exports變量: | 指向moudle.exports,為瞭操作的方便,它不能直接指向一個值 |
(4)使用require導入模塊:導入並執行一個JavaScript文件,返回的是一個exports對象,若沒有找到相應的對象就報錯
- 模塊輸出是一個函數,則該函數的輸出接口不能用exports變量來導出必須用戶moudle.exports導出
- 加載規則:
A、用來加載js文件,默認的文件擴展名為.js
B、根據參數的不同格式,去不同路徑下查找相應的js文件
'./(../)':表示加載路徑是相對路徑
'/':表示加載路徑是絕對路徑
既不是'./(../)'也不是'/':表示加載的模式是node的核心模塊,在node安裝路徑的node_modules中
- require的內部處理的流程
require –>module.exports–>moudle._load
三、npm 與 包
1、包的概念
什麼是包?
Node.js 中的第三方模塊又叫做包。 就像電腦和計算機指的是相同的東西,第三方模塊和包指的是同一個概念,隻不過叫法不同。
包的來源?
不同於 Node.js 中的內置模塊與自定義模塊,包是由第三方個人或團隊開發出來的,免費供所有人使用。 註意:Node.js 中的包都是免費且開源的,不需要付費即可免費下載使用。
為什麼需要包?
由於 Node.js 的內置模塊僅提供瞭一些底層的 API,導致在基於內置模塊進行項目開發的時,效率很低。 包是基於內置模塊封裝出來的,提供瞭更高級、更方便的 API,極大的提高瞭開發效率。 包和內置模塊之間的關系,類似於 jQuery 和 瀏覽器內置 API 之間的關系。
2、包的安裝與卸載
npm 包的安裝——
npm install 包的完整名稱
npm 包的卸載——
npm uninstall 包的完整名稱
安裝指定保本的包——
默認情況下,使用 npm install 命令安裝包的時候,會自動安裝最新版本的包。如果需要安裝指定版本的包,可以在包名之後,通過 @ 符號指定具體的版本,例如
npm install [email protected]
3、包管理配置文件
npm 規定,在項目根目錄中,必須提供一個叫做 package.json 的包管理配置文件。用來記錄與項目有關的一些配置信息。例如:
- 項目的名稱、版本號、描述等
- 項目中都用到瞭哪些包
- 哪些包隻在開發期間會用到
- 哪些包在開發和部署時都需要用到
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Node.js的模塊化機制和Buffer對象詳解
- Node.js模塊化的使用詳細介紹
- 淺談Webpack是如何打包CommonJS的
- TypeScript聲明文件的語法與場景詳解
- 詳解Node.js如何處理ES6模塊