客戶端模塊化規(guī)范之AMD

特點(diǎn):異步加載規(guī)范
語(yǔ)法:
  • 定義模塊
define(function () {
  return module
})

define(['module1', 'module2'], function (module1, module2) {
  return module
})
  • 導(dǎo)入模塊
requireJs(['module1', 'module2'], function (module1, module2) {
  // to do something
})
使用的標(biāo)準(zhǔn)庫(kù)requireJs

示例目錄機(jī)構(gòu)如下:


image.png

1、index.html引入模塊主文件:

<!DOCTYPE html>
<html>
<head>
    <title>AMD模塊規(guī)范</title>
</head>
<body>

<!-- data-main: 表示指定主模塊文件,一定要設(shè)置!??! -->
<script type="text/javascript" src="js/lib/require.js" data-main="js/app.js"></script>
</body>
</html>

2、編寫符合規(guī)范的自定義模塊module1.js和module2.js

// 定義一個(gè)沒有依賴的模塊
define(() => {
    const logMessage = () => `這是一個(gè)沒有依賴的模塊`;
    return {
        logMessage
    };
});
// 定義一個(gè)有依賴的模塊
// requirejs.config中配置的模塊名稱進(jìn)行模塊引入,模塊參數(shù)對(duì)應(yīng)數(shù)組順序
define('module2', ['module1'], (module1) => {
    const message = '這是一個(gè)有依賴的模塊';
    const showMessage = () => console.log(message, module1.logMessage());
    return { showMessage };
});

3、編寫模塊的主入口文件app.js

// 這個(gè)是主模塊,其他模塊在此導(dǎo)入
// 引入模塊前需要進(jìn)行一些基礎(chǔ)配置
requirejs.config({
    // baseUrl: 'js/', // 基礎(chǔ)路徑的配置,指定所有模塊的統(tǒng)一路徑
    paths: {
        module1: 'module/module1',
        module2: 'module/module2',
        /**
            說明:
            1、paths中key的值代表這個(gè)模塊,在其他地方使用模塊時(shí)用這個(gè)名字就可以;
            2、value代碼模塊路徑,一定要省略后綴.js
        */
        jquery: 'lib/jquery-3.6.0',
        underscore: 'lib/underscore' // 這里將underscore中amd實(shí)現(xiàn)代碼注釋,使其成為不符合規(guī)范的模塊
    },
    shim: {
        underscore: {
            exports: '_',
            // deps: ['jquery']
        }
        /*
            為了解決沒有實(shí)現(xiàn)amd規(guī)范的模塊問題。
            1、exports的值需要和該模塊實(shí)際暴露的值類型相同,比如underscore實(shí)際暴露的為對(duì)象;
            2、deps是該模塊所需要的依賴。
        */
    }
});

// 導(dǎo)入模塊
requirejs(['module2', 'jquery', 'underscore'], (module2, $, _) => {
    module2.showMessage();
    $('body').css('background', 'lightblue');
    const result = _.map([1, 2, 3], item => item * 3);
    console.log('result: ', result)
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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