• require 那点事


    require 提供了一个 模块管理的方案 不太熟悉的话挺多暗坑 团队引入 需谨慎 彻底熟悉后 再引入项目

    ADM规范

    Asynchronous Module Definition - 异步加载模块规范

    解决模块化编程带来的代码加载先后顺序问题及常规异步加载代码带来的不确定因素

    载入require实现模块化编程

    1
    <script src="/static/js/require.min.js" data-main="/static/js/shop"></script>

    data-main指定了入口配置文件shop.js,同时指定了基于shop.js的相对路径baseUrl,baseUrl可以在config配置方法内重置

    require.config配置方法

    baseUrl重置相对路径

    1
    2
    3
    require.config({
        baseUrl : 'js/lib'
    });

    paths配置待调用模块路径

    1
    2
    3
    4
    5
    6
    require.config({
        paths : {
            jquery : 'jquery.min',
            control : 'control'
        }
    });

    已配置路径的模块的调用方式

    1
    2
    3
    require(['jquery', 'control'], function ($, Control){
        return true;
    });

    shim垫片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    require.config({
        paths : {
            underscore : 'underscore.min',
            backbone : 'backbone.min'
        },
        shim : {
            underscore : {
                exports : '_'
            },
            backbone : {
                deps : ['underscore'],
                exports : 'Backbone'
            }
        }
    });

    有时我们需要使用非AMD定义模块,如jQuery,需要shim参数来帮助解决这些库的解析名称及载入顺序问题

    项目入口配置文件shop.js代码展示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    require.config({
        paths : {
            jquery   : 'jquery.min',
            jqmd5    : 'jquery.md5',
            cookie   : 'public/cookie',
     
            jqui     : 'jquery.ui.min', /* 前端UI框架 */
            jquid    : 'jquery.ui.dialog.min', /* 前端UI框架 - 模态框模块 */
            jqtmpl   : 'jquery.tmpl.min', /* 模版引擎 */
            jqvali   : 'jquery.validation.min', /* 表单验证 */
            jqvalicn : 'jquery.validation.cn.min', /* 表单验证汉化 */
     
            base     : 'base', /* 基础功能 */
            control  : 'control', /* 控制器模块 */
            login    : 'login/index', /* 登录页模块 */
            register : 'register/index', /* 注册页模块 */
            detail   : 'detail/index' /* 详情页模块 */
        }
    });
     
    require(['control'], function (Control){
        Control.cookie();
        Control.template();
    });
     

    定义模块的define方法

    独立模块

    1
    2
    3
    4
    define(function (){
        var control = {};
        return control;
    });

    该模块调用不依赖其它模块

    依赖模块

    1
    2
    3
    4
    define(['base'], function (){
        var control = {};
        return control;
    });

    该模块调用需要依赖base模块

    项目控制器模块control.js代码展示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    define(['jquery', 'jqmd5', 'cookie', 'base'], function (){
        var control = {};
     
        /**
         * 登录状态检测
         */
        control.cookie = function (){
            setTimeout(WK.LC.syncLoginState, 100);
        };
     
        /**
         * 模块调用及配置
         */
        control.template = function (){
            if($('.naver').length > 0) base.naver();
     
            if(CATEGORY == 'login')
            {
                if(MODEL == 'index'){
                    // 登录页
                    require(['login'], function (Login){
                        Login.form();
                    });
                };
     
                if(MODEL == 'register' || MODEL == 'check'){
                    // 注册页
                    require(['register'], function (Register){
                        Register.form(MODEL);
                    });
                };
            };
     
            if(CATEGORY == 'goods')
            {
                // 详情页
                if(MODEL == 'index'){
                    require(['detail'], function (Detail){
                        // Detail.form();
                    });
                };
            };
        };
     
        return control;
    });

    加载模块的require方法

    异步加载

    1
    2
    3
    4
    require(['control'], function (Control){
        Control.cookie();
        Control.template();
    });

    AMD模式

    定义模块的define方法和调用模块的require方法,合称AMD模式

    该模式的定义模块方法清晰且不会污染全局环境,能够清楚的显示依赖关系

    require是一款可以帮助我们架构好前端框架的好工具,为我们带来更为方便的模块化编程,轻松控制好模块载入的数量和顺序,并且性能优秀
  • 相关阅读:
    ESP32 SDA和SCL
    ESP32的HSPI和VSPI区别
    ffmpeg生成视频封面图
    小程序读取几种不同格式json数据(小程序json解析)
    ajax
    使用Java语言,连接linux服务器,并远程执行shell 脚本
    Echarts饼图的使用
    js提取对象数组中的某一个属性
    java读取文件推送报文
    java读取本地文件内容TXT文件
  • 原文地址:https://www.cnblogs.com/bzggood/p/5844526.html
Copyright © 2020-2023  润新知