1跟伏、AMD和CMD是基于require來實(shí)現(xiàn)的丢胚。
2、AMD和CMD兩者的不同在于對依賴塊的執(zhí)行時機(jī)處理不同受扳。AMD依賴前置,js可以方便知道依賴模塊是誰兔跌,立即加載勘高;CMD就近依賴,按需加載坟桅,需要使用把模塊變?yōu)樽址馕鲆槐椴胖酪蕾嚵四切┠K华望。
3、AMD和CMD兩者都是異步加載仅乓。
4赖舟、import模塊導(dǎo)入與export模塊導(dǎo)出功能相應(yīng),也存在兩種模塊導(dǎo)入方式:命名式導(dǎo)入(名稱導(dǎo)入)和默認(rèn)導(dǎo)入(定義式導(dǎo)入)夸楣。是ES2015里的新模塊化規(guī)范宾抓。注意:在node中使用的是exports,不要混淆了豫喧。
5石洗、import的語法跟require不同,而且import必須放在文件的最開始紧显,且前面不允許有其他邏輯代碼讲衫,這和其他所有編程語言風(fēng)格一致。
6孵班、require的使用非常簡單涉兽,它相當(dāng)于module.exports的傳送門招驴,module.exports后面的內(nèi)容是什么,require的結(jié)果就是什么枷畏,對象忽匈、數(shù)字、字符串矿辽、函數(shù)......再把require的結(jié)果賦值給某個變量丹允,相當(dāng)于把require和module進(jìn)行平行空間的位置重疊。屬于CommonJS規(guī)范的一部分袋倔。
7雕蔽、ES6發(fā)布的module并沒有直接采用CommonJS,甚至連require都沒有采用宾娜,也就是說require仍然只是node的一個私有的全局方法批狐,module.exports也只是node私有的一個全局變量屬性,跟標(biāo)準(zhǔn)毛線關(guān)系都沒有前塔。
8嚣艇、require是賦值過程,其實(shí)require的結(jié)果就是對象华弓、數(shù)字食零、字符串、函數(shù)等寂屏,再把require的結(jié)果賦值給某個變量贰谣;import是結(jié)構(gòu)過程。
9迁霎、require/exports:遵循CommonJS/AMD吱抚,只能在運(yùn)行時確定模塊的依賴關(guān)系及輸入/輸出的變量,無法進(jìn)行靜態(tài)優(yōu)化考廉。
用法只有以下三種簡單的寫法:
(1)const fs = require('fs')
(2)exports.fs = fs
module.exports = fs
import/export:遵循ES6規(guī)范秘豹,支持編譯時靜態(tài)分析,便于JS引入宏和類型檢驗(yàn)昌粤。動態(tài)綁定既绕。
寫法就比較多種多樣:
(1)import fs from 'fs'
(2)import { default as fs } from 'fs'
(3)import * as fs from 'fs'
(4)import { readFile } from 'fs'
(5)import { readFile as read } from 'fs'
(6)import fs, { readFile } from 'fs'
(7) export default fs
(8) export const fs
(9)export function readFile
(10)export { readFile, read }
(11)export * from 'fs'
參考原文鏈接:https://blog.csdn.net/wangrong111222/article/details/79781059