module.exports與export那些事兒

首先,咱們要明白一個前提,那就是CommonJS模塊規範與ES模塊規範是不一樣的概念函數

1. CommonJs

1.1 概念

  • Node應用由模塊組成,採用CommonJS模塊規範。
    1. 根據規範,每一個文件就是一個模塊,有本身單獨的做用域。在一個文件裏面定義變量,函數,類等都是私有的,對其餘的文件不可見。
    2. 根據規範,每一個模塊內部,module白能量表明當前模塊。這個變量是一個對象,它的exports屬性(module.exports)是對外的接口。
    3. module.exports用於輸出文件定義內容,require用於加載模塊。

1.2 實例

1.2.1 module.exports
// example.js
let x = 5;
let addX = (value) => {
    return x + value;
}
module.exports.x = x;
module.exports.addX = addX;
複製代碼
1.2.2 require
let requireTest = require(./example.js);
let x = requireTest.x;
let addX = requireTest.addX(3);
console.log(x); // 5
console.log(addx); // 8
複製代碼

1.3 exports與module.exports

  • Node爲每一個模塊提供了一個exports變量,指向module.exports。這如同在每一個模塊的頭部添加以下代碼:
let exports = module.exports;
複製代碼
  • module.exports纔是真正的接口,exports只不過是它的一個輔助工具。 最終返回給調用的是module.exports而不是exports。 全部的exports收集到的屬性和方法,都賦值給了Module.exports。

2. ES6模塊規範

2.1 概念

  • 不一樣於CommonJS,ES6使用的是export和import來導出和導入模塊。
  • export命令規定的是對外的接口,必須與模塊內部的變量創建意義對應關係。

2.2 實例

2.2.1 export
let firstName = "Chengwu";
let lastName = "Du";
export { firstName, lastName }
複製代碼
2.2.2 export意義對應實例
// one
export const PI = "3.1415926";

// two
let name = "Robin";
export { name }

// three
let n = "Robin";
export { n as name }
複製代碼
2.2.3 import
import { firstName, lastName } from "./export.js";
let name = firstName + lastName;
console.log(name); // Chengwu Du
複製代碼

2.3 export default

export defalut function() {
    return "Robin";
}
複製代碼
2.3.1 export default與export區別
  • 在一個文件或者模塊中,export和import能夠有多個,可是export default卻僅有一個。
  • 經過export方式導出,再導入時須要加{},按需加載。可是export default不須要。
  • 輸出單個模塊時使用export default,多個模塊時使用export。
  • 不要同時使用。
相關文章
相關標籤/搜索