深入聊聊Node.js中的模塊化( 四 )


(3)package.json 中必須包含 name , version , main 這三個屬性 , 分別代表包的名字、版本號、包的入口 。
注意:以上 3 點要求是一個規范的包結構必須遵守的格式 , 關于更多的約束 , 可以參考如下網址:https://yarnpkg.com/zh-Hans/docs/package-json
3.7 開發屬于自己的包
1、初始化包的基本結構
(1)新建一個itheima-tools文件夾 , 作為包的根目錄
(2)在itheima-tools文件夾中 , 新建如下三個文件:

    package.json (包管理配置文件)
    index.js (包的入口文件)
    README.md (包的說明文檔)
2、初始化 package.json
深入聊聊Node.js中的模塊化

文章插圖

注:name—用于告知應用程序或軟件包的名稱;version—表明了當前的版本;main—設置了應用程序的入口點;description是應用程序/軟件包的簡短描述;keywords—此屬性包含與軟件包功能相關的關鍵字數組(有助于瀏覽node官網找到該軟件包);license—指定軟件包的許可證 。
3、編寫包的說明文檔
包根目錄中的 README.md 文件 , 是包的使用說明文檔 。 通過它 , 我們可以事先把包的使用說明 , 以 markdown 的格式寫出來 , 方便用戶參考 。
README 文件中具體寫什么內容 , 沒有強制性的要求;只要能夠清晰地把包的作用、用法、注意事項等描述清楚即可 。
3.8 發布包
1、注冊 npm 賬號
(1)訪問 www.npmjs.com/ 網站 , 點擊 sign up 按鈕 , 進入注冊用戶界面
(2)填寫賬號相關的信息:Full Name、Public Email、Username、Password
(3)點擊 Create an Account 按鈕 , 注冊賬號
(4)登錄郵箱 , 點擊驗證鏈接 , 進行賬號的驗證
2、登錄 npm 賬號
npm 賬號注冊完成后 , 可以在終端中執行 npm login 命令 , 依次輸入用戶名、密碼(密碼是隱藏的 , 看不到 , 只管輸入正確回車即可)、郵箱、發送到郵箱的OTP code后 , 即可登錄成功 。
注意:在運行 npm login 命令之前 , 必須先把下包的服務器地址切換為 npm 的官方服務器 。 (如果之前是用的taobao服務器一定要切換為npm官方服務器)否則會導致發布包失?。?
深入聊聊Node.js中的模塊化

文章插圖

3、把包發布到 npm 上
將終端切換到包的根目錄之后 , 運行 npm publish 命令 , 即可將包發布到 npm 上(注意:包名不能雷同 , 可以去官網查是否有重名的包) 。
4、刪除已發布的包
運行 npm unpublish 包名 --force 命令 , 即可從 npm 刪除已發布的包 。
注意:
(1)npm unpublish 命令只能刪除 72 小時以內發布的包
(2)npm unpublish 刪除的包 , 在 24 小時內不允許重復發布
(3)發布包的時候要慎重 , 盡量不要往 npm 上發布沒有意義的包!
四、模塊的加載機制4.1 優先從緩存中加載
模塊在第一次加載后會被緩存 。 這也意味著多次調用 require() 不會導致模塊的代碼被執行多次 。
深入聊聊Node.js中的模塊化

文章插圖

注意:不論是內置模塊、用戶自定義模塊、還是第三方模塊 , 它們都會優先從緩存中加載 , 從而提高模塊的加載效率 。
4.2 內置模塊的加載機制
內置模塊是由 Node.js 官方提供的模塊 , 內置模塊的加載優先級最高 。
例如:require('fs') 始終返回內置的 fs 模塊 , 即使在 node_modules 目錄下有名字相同的包也叫做 fs 。
4.3 自定義模塊的加載機制
使用 require() 加載自定義模塊時 , 必須指定以 ./ 或 ../ 開頭的路徑標識符 。 在加載自定義模塊時 , 如果沒有指定 ./ 或 ../ 這樣的路徑標識符 , 則 node 會把它當作內置模塊或第三方模塊進行加載 。
同時 , 在使用 require() 導入自定義模塊時 , 如果省略了文件的擴展名 , 則 Node.js 會按順序分別嘗試加載以下的文件:
(1)按照確切的文件名進行加載
(2)補全 .js 擴展名進行加載
(3)補全 .json 擴展名進行加載
(4)補全 .node 擴展名進行加載
(5)加載失敗 , 終端報錯
4.4 第三方模塊的加載機制
如果傳遞給 require() 的模塊標識符不是一個內置模塊 , 也沒有以 ‘./’ 或 ‘../’ 開頭 , 則 Node.js 會從當前模塊的父目錄開始 , 嘗試從 /node_modules 文件夾中加載第三方模塊 。
如果沒有找到對應的第三方模塊 , 則移動到再上一層父目錄中 , 進行加載 , 直到文件系統的根目錄 。

推薦閱讀