Node.js初識模塊化

模塊化

基本概念

在nodejs中,應用由模塊組成,nodejs中採用commonJS模塊規範。

  1. 一個js文件就是一個模塊
  2. 每個模塊都是一個獨立的作用域,在這個而文件中定義的變量、函數、對象都是私有的,對其他文件不可見,引入後會報錯。

node中模塊分類

  • 1 核心模塊
    • 由 node 本身提供,不需要通過npm安裝,可直接引入使用
  • 2 第三方模塊
    • 由社區或個人提供,需要通過npm安裝後使用
  • 3 自定義模塊
    • 由我們自己創建,比如:tool.js 、 user.js

點擊瞭解npm的基本使用

核心模塊

常見的核心模塊有:

  • fs:文件操作模塊
  • http:網絡操作模塊
  • path:路徑操作模塊
  • url: 解析地址的模塊
  • querystring: 解析參數字符串的模塊
  • 基本使用:1 先引入 2 再使用
// 引入fs模塊
const fs = require('fs');

第三方模塊

  • 第三方模塊是由社區或個人提供的
  • 比如:mime模塊/art-template/jquery…
  • 基本使用:1 先通過npm下載 2 再引入 3 最後使用

用戶自定義模塊

  • 由開發人員創建的模塊(JS文件)
  • 基本使用:1 創建模塊 2 引入模塊
  • 注意:自定義模塊的路徑必須以./獲取../開頭,不然會被當做核心模塊或者第三方模塊引入
// 加載自定義模塊
require('./a')     // 推薦使用,省略.js後綴!

require('./a.js')  //不省略.js後綴

模塊的導入與導出

模塊導入

  • 通過require("fs")來加載模塊
  • 如果是第三方模塊,需要先使用npm進行下載
  • 如果是自定義模塊,需要加上相對路徑./或者../,可以省略.js後綴,如果文件名是index.js那麼index.js也可以省略。
  • 模塊可以被多次引入,但是只會在第一次加載

模塊導出

  • 在模塊的內部,module變量代表的就是當前模塊,它的exports屬性就是對外的接口,加載某個模塊,加載的就是module.exports屬性,這個屬性指向一個空的對象。
//module.exports指向的是一個對象,我們給對象增加屬性即可。
module.exports.num = 123;
module.exports.age = 18;

//通過module.exports也可以導出一個值或者函數,但是多次導出會覆蓋
module.exports = '123';
module.exports = "abc";

module.exports與exports

  • exportsmodule.exports 的引用
  • 注意:給 module.exports 賦值會切斷與 exports 之間的聯繫
    • 1 直接添加屬性兩者皆可
    • 2 賦值操作時,只能使用 module.exports
console.log( module.exports === exports ) // ==> true

// 等價操作
module.exports.num = 123
exports.num = 123

// 賦值操作:不要使用 exports = {}
module.exports = {}

模塊查找規則

核心模塊

  • 直接去node安裝包中找

第三方模塊(以mime包爲例)

  • 先基於當前文件模塊所屬目錄找 node_modules 目錄
  • 如果找到,則去該目錄中找 mime 目錄
  • 如果找到 mime 目錄,則找該目錄中的 package.json 文件
  • 如果找到 package.json 文件,則找該文件中的 main 屬性
  • 如果找到 main 屬性,則拿到該屬性對應的文件路徑
  • 如果找到 mime 目錄之後
  • 發現沒有 package.json
  • 或者 有 package.json 沒有 main 屬性
  • 或者 有 main 屬性,但是指向的路徑不存在
  • 則 node 會默認去看一下 mime 目錄中有沒有 index.js index.node index.json 文件
  • 如果找不到 index 或者找不到 mime 或者找不到 node_modules
  • 則進入上一級目錄找 node_moudles 查找規則同上
  • 如果上一級還找不到,繼續向上,一直到當前文件所屬磁盤根目錄
  • 如果最後到磁盤根目錄還找不到,最後報錯:can not find module xxx

自定義模塊

  • 直接相對於當前文件去找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章