javascript模塊化總結(jié)

CommonJS 規(guī)范

  • 實(shí)現(xiàn)js模塊化
    • 模塊加載 require
    • 模塊標(biāo)識 module
    • 模塊定義 exports
  • Node.js 按照 CommonJS 規(guī)范編寫
  • require() 是同步加載模塊的,僅適合服務(wù)端。
// foo.js
module.exports = function () {
    return 'foo'; 
};

// main.js
var foo = require("./foo.js")

AMD 規(guī)范

AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。

  • 讓瀏覽器端的模塊采用"異步加載"(asynchronous),適合瀏覽器端。
  • 同樣采用require()語句加載模塊,但是不同于CommonJS,它要求兩個(gè)參數(shù),分別是 module (數(shù)組) 和 callback (回調(diào)函數(shù)):
// main.js
require(['math'], function (math) {
    math.add(2, 3);
});

require.js

require.js 實(shí)現(xiàn)了AMD規(guī)范,主要為了解決兩個(gè)問題:

  • 實(shí)現(xiàn)js文件的異步加載,避免網(wǎng)頁失去響應(yīng);
  • 管理模塊之間的依賴性,便于代碼的編寫和維護(hù)。

使用方式

只需在 script 標(biāo)簽中引入庫文件和主模塊 main.js 文件:

<script src="js/require.js" data-main="js/main"></script>

AMD模塊的寫法

通過define函數(shù)定義模塊

// math.js
define(function (){
    var add = function (x,y){
        return x+y;
    };

    return {
        add: add
    };
});

// main.js
require(['math'], function (math){
    alert(math.add(1,1));
});

如果這個(gè)模塊還依賴其他模塊,那么 define() 函數(shù)的第一個(gè)參數(shù),必須是一個(gè)數(shù)組,指明該模塊的依賴性。

代碼實(shí)例:

https://www.cnblogs.com/chenguangliang/p/5856701.html

CMD 規(guī)范

  • 與 AMD 類似,sea.js 實(shí)現(xiàn)。

參考:

ES6

  • 語法: import export (注意有無 default)
  • 環(huán)境: babel 編譯 ES6 語法,模塊化可用 webpack 和 rollup
// util1.js
export default {
    a: 100
}

//util2.js
export function fn1() {
    alert('fn1')
}

export function fn2() {
    alert('fn2')
}

// index.js
import util1 from './util1.js'
import { fn1, fn2 } from './util2.js'

console.log(util1)
fn1()
fn2()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容