Node那些事之模塊化

什麼是模塊化開發,及模塊化開發的好處

  • 什麼是模塊化開發: 把一些功能相似的代碼,封裝到一個單獨的文件中去,這些單獨抽離出來的代碼,就可以提供各類各樣好用的功能.這種經過代碼功能分割文件的方式就叫作模塊化開發.
  • 好處: 保證了每一個文件的功能(職能)單一.須要什麼特定的功能,就直接調用某一個特定的模塊.這樣對未來程序開發和維護都有好處

Node中如何實現模塊化開發

在Node中主要經過三個東西實現模塊化開發:node

  • module: 表示一個模塊,在Node中最多見的模塊就是一個一個的JS文件.
  • require: 做用是加載其餘模塊用的.在一個JS文件中若是想要引用其餘JS文件的成員,就須要使用require.
  • exports: 在Node的模塊中,若是要這個模塊向外暴露一些成員,以供其它JS模塊使用,那麼就要使用exports

Node中的模塊化主要是爲了解決JS文件之間的相互依賴關係npm

Node中模塊的分類

Node有三部分組成:ECMAScript + 核心API + 第三方包json

核心API

  • 什麼是核心API: 由Node官方將一些經常使用的功能模塊編譯成二進制的執行文件,而後集成到Node的安裝包中.在咱們安裝完Node以後,也同時安裝了這些功能模塊.
  • 如何使用核心模塊: 使用require("核心模塊名稱")以下例
const XXX = require("XXX");
複製代碼

第三方模塊

  • 什麼是第三方模塊: 除了官方提供的核心模塊以外,咱們在平常開發中也許還有一些使用頻率很高的功能代碼.而這些功能就被一些厲害的團隊、我的、公司打包成可複用的模塊.並經過NPM官網託管出去,供其餘人下載使用.緩存

  • 如何使用第三方模塊:bash

    1. 先使用npm下載這個模塊.
    2. 使用require導入你所下載的第三方模塊.你導入模塊的名字就是你安裝時的名字.
    3. 經過查閱官方文檔,使用你所下載的第三方模塊

**注意:**不管是核心模塊仍是第三方模塊,都是經過 標識符名稱 來引用這個模塊的.異步

用戶模塊

  • 什麼是用戶模塊: 本身所寫的JS文件,通通屬於用戶模塊
  • 用戶模塊向外導出成員的兩種方式:
    1. 使用global這個全局對象,將你想要導出的成員掛載到這個對象上面.可是這種方法有兩個缺陷.
      • 會形成全局變量污染
      • 不知道所引用的成員是誰導出的. 因此通常狀況下咱們使用下面這種方式.
    2. 使用exports來導出須要暴露的成員

exports和module.exports

  1. 經過module.exports可使用 . 的形式追加屬性,也可使用 = 直接賦值的形式導出成員
  2. exports只能經過 . 的形式追加屬性,不能使用 = 直接賦值的形式
  3. 在一個module中,最終向外暴露的成員,以module.exports指向的對象爲準.
  4. 在一個module中,不要混合使用module.exportsexports.

Node中的模塊加載規則

優先從緩存中加載模塊化

  • 加載核心模塊: 優先從緩存中加載,若是緩存中沒有再去執行加載核心模塊
  • 加載本身的模塊: 優先從緩存中加載,若是緩存中沒有,再去執行加載本身的模塊. 用戶模塊的查找規則: 不過不寫後綴名,則先嚴格按照給定的文件名去查找模塊並加載.若是找不到,則按照必定的規則順序去查找加載帶後綴名的同名文件.以下例:
    index -> index.js -> index.json -> index.node
    複製代碼
  • 第三方的模塊查找規則:
    1. 首先查看項目的跟目錄下有沒有node_modules這個文件夾.
    2. 查找node_modules文件夾中有沒和第三方模塊名稱一致的文件夾.
    3. 在模塊對應的文件夾中,查找有沒有package.json這個文件
    4. package.json文件中查找有沒有main屬性.
    5. 若是有main屬性,而且main屬性指向的路徑存在,那麼就嘗試加載這個路徑指定的文件
    6. 若是package.json文件中,沒有main屬性,或者main屬性指向的路徑不存在,或者乾脆就沒有package.json文件.那麼,就會嘗試加載模塊根目錄中的index相關文件:index.js -> index.json -> index.node
    7. 若是在node_modules文件中找不到對應的模塊文件夾,或者在項目根目錄中就沒有node_modules這個文件夾.則會向上一層的文件夾中查找,查找規則同上.
    8. 若是上一層文件夾得目錄中也沒有找到,則再向上一層文件夾中去找,直到找到當前項目所在的盤符根目錄爲止.
    9. 若是找到盤符根目錄尚未找到,則報錯:cannot find module ***

關於模塊化

  • Node中的模塊化基於common.js,其特色是有所的依賴項同步加載.
  • common.js因爲是一個同步加載規範,因此不適合瀏覽端使用.因而瀏覽端有了異步模塊加載機制AMD規範.
  • 在ES6中已推出了語言規格上的模塊化方案.

個人我的網址: wangyiming.infoui

相關文章
相關標籤/搜索