[工具配置]使用requirejs模块化开发多页面一个入口js的使用方式

news/2024/7/3 19:15:51

描述

知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置。但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多。理论这样其实也没什么,但是到后面用grunt进行合并压缩就会有很多入口js,虽然这个入口js都把配置的模块内容都压缩到里面了,但是各个入口合并压缩后的文件中其实都有很多重合的代码,所以考虑到这个就想到把所以的入口文件都统一了,使用一个,到时候用grunt合并压缩也只有这么一个入口文件,也很方便。

实现原理

1.页面引入requirejs 和 设置id和当前页面信息的属性

<script src="/res/js/require.js" data-main="/res/js/require.config" id="current-page" current-page ="news" target-module="/res/js/module/newsCtrl"  defer async="true" ></script>

2、编写require.config.js 根据不同的页面去初始化不同的页面信息

/**
 * 1、所有页面使用公共的require配置
 * 2、根据current-page去加载相应地模块,不需要的模块不要去加载
 * 3、每个模块都要按约定去对外暴露一个init的初始化方法,用于页面信息加载时间监听
 * 
 */

require.config({ 
    urlArgs: "ver=1.0_" + (new Date).getTime(),   
    paths: {      
        "jquery": "/res/js/base/jquery-1.11.3.min",
        "vue":'/res/js/base/vue.min',
        "common": "/res/js/widgets/common"
    },
    shim: {
        'scroll': {      
            deps: ['jquery'],
            exports: 'jQuery.fn.scroll'    
        },
        'vue':{
            exports:'vue'
        },
        'common':['jquery']
    }
});


require(["jquery"], function ($) {
    require(["common"], function (common) {
        var currentPage = $("#current-page").attr("current-page");
        var targetModule = $("#current-page").attr("target-module");
        if (targetModule) {
            // 页面加载完毕后再执行相关业务代码比较稳妥
            $(function () {
                require([targetModule], function (targetModule) {
                    // 不要在这里写业务代码
                    //全部统一调用init方法
                    //也就是每个模块都暴露一个init方法用于事件监听,页面内容加载等
                    targetModule.init(currentPage);
                });
            });
            return;
        }
    });
});

3、定义模块,实现初始化init方法进行事件监听和页面信息初始化

define(['jquery', "common"], function ($, common) {    
    var newCtrl = {};
    newCtrl.init = function (page) {
        common.info("开始初始化页面信息");
    };
    newCtrl.login = function () {};
    return newCtrl;
});

参考地址:https://my.oschina.net/fengshuzi/blog/650710


http://www.niftyadmin.cn/n/2011081.html

相关文章

在oc项目中添加swift文件,并设置oc-swift混编

在项目中右键添加一个swift文件&#xff0c;我添加的LearnSwift.swift 添加后Xcode弹出‘是否配置oc桥接头文件’的提示&#xff0c;点确认&#xff0c;系统自动生成一个项目名-Bridging-Header.h的文件&#xff0c;我的是LearnSwift-Bridging-Header.h。 配置oc桥接头文件的…

在Hekaton里,正确选择哈希存储桶数

今天我使用2048的桶数的哈希索引&#xff0c;往Hakaton里插入100万的记录&#xff0c;测试下在哈希桶数里&#xff0c;哈希冲突&#xff08;Hash Collision&#xff09;是如何影响Hekaton的工作量——结果非常非常有意思。首先我想介绍下什么是哈希冲突。 你可能知道&#xff0…

正则表达式 学习笔记2.1

徒弟&#xff1a;师傅呀&#xff0c;正则怎么用呀&#xff1f;搞个有条理性的东东给我看看吧&#xff01; 师傅&#xff1a;也对&#xff0c;没条理的东西&#xff0c;不懂的人&#xff0c;看了更加晕&#xff0c;先讲讲&#xff1a;字符组。1、基本功能 字符组:l 正则表达式的…

对话框上动态控件的创建、在Picture Control控件上显示图片

1 MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象。 当在对话框之上使用静态控件时&#xff0c;可以根据类向导来为每个控件添加消息、响应函数以及变量。 当需要在对话框中动态的创建某个控件时&#xff0c;就需要手动来代替类向导为动态控件添加消息、…

简单的C#图片压缩类-winform

#region C#图片处理功能 -- BY DREAMDLM/*{*******************************************************************}{ }{ C#图片处理功能-DREAMDLM }{ …

sql 先进先出 库存

createtablet( id intidentity(1,1), name varchar(50),--商品名称 j int, --入库数量 c int, --出库数量 jdate datetime--入库时间 ) insertintot(name,j,c,jdate) selectA,100,0,2007-12-01insertintot(name,j,c,jdate) selectA,200,0,2008-01-07insertintot…

使用Spring RestTemplate解析RESTful服务

在上一篇“使用Spring MVC 4构建Restful服务”博文中&#xff0c;我们谈到了如何使用Spring MVC 4搭建RESTful服务&#xff0c;本文以上篇文章为基础&#xff0c;继续讲解如何解析Spring RESTful服务。上篇文章中&#xff0c;我们用了jacson包进行Java对象的序列化&#xff0c;…

javaApi免费下载

压缩包&#xff1a; 链接&#xff1a;http://pan.baidu.com/s/1qYoizco 密码&#xff1a;cxur .chm文件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WRFecsOo9-pZSb9CoeT7FQ 密码&#xff1a;g7ym CSDN下载&#xff1a;https://download.csdn.net/download/eseszb/…