學習javascript中的require、import和export的一點總結
1, AMD和CMD是基於require 來實現的。
2, AMD和CMD兩者的不同在於對依賴模組的執行時機處理不同。AMD依賴前置,js可以方便知道依賴模組是誰,立即載入;CMD就近依賴,按需載入,需要使用把模組變為字串解析一遍才知道依賴了那些模組。
3, AMD和CMD兩者都是非同步載入,。
4,import模組匯入與export模組匯出功能相對應,也存在兩種模組匯入方式:命名式匯入(名稱匯入)和預設匯入(定義式匯入)。是ES2015
裡的新模組化規範。注意:在node中使用的是exports,不要混淆了。
5,import的語法跟require不同,而且import必須放在檔案的最開始,且前面不允許有其他邏輯程式碼,這和其他所有程式語言風格一致。
6,require的使用非常簡單,它相當於module.exports的傳送門,module.exports後面的內容是什麼,require的結果就是什麼,物件、數字、字串、函式……再把require的結果賦值給某個變數,相當於把require和module.exports進行平行空間的位置重疊。屬於CommonJS
規範的一部分。
7,ES6釋出的module並沒有直接採用CommonJS,甚至連require都沒有采用,也就是說require仍然只是node的一個私有的全域性方法,module.exports也只是node私有的一個全域性變數屬性,跟標準半毛錢關係都沒有。
8,require是賦值過程,其實require的結果就是物件、數字、字串、函式等,再把require的結果賦值給某個變數
9,
require / exports :
遵循 CommonJS/AMD,只能在執行時確定模組的依賴關係及輸入/輸出的變數,無法進行靜態優化。
用法只有以下三種簡單的寫法:
const fs = require('fs')
exports.fs = fs
module.exports = fs
10,
import / export:
遵循 ES6 規範,支援編譯時靜態分析,便於JS引入巨集和型別檢驗。動態繫結。
寫法就比較多種多樣:
import fs from 'fs' import {default as fs} from 'fs' import * as fs from 'fs' import {readFile} from 'fs' import {readFile as read} from 'fs' import fs, {readFile} from 'fs' export default fs export const fs export function readFile export {readFile, read} export * from 'fs'