zoukankan      html  css  js  c++  java
  • [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式

    描述

    知道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

  • 相关阅读:
    【题解】Codeforces Round #600(Div.2)
    【题解】CF 1073 G. Another LCP
    【题解】CF 1129C. Morse Code
    【题解】CF 1200E. Compress Words
    Cpp Chapter 8: Adventures in Functions Part4
    Cpp Chapter 8: Adventures in Functions Part3
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Exercise
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 4
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 3
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 2
  • 原文地址:https://www.cnblogs.com/moqiutao/p/7007098.html
Copyright © 2011-2022 走看看