首頁  >  文章  >  web前端  >  怎麼用requirejs模組化開發多頁面一個入口?

怎麼用requirejs模組化開發多頁面一個入口?

零下一度
零下一度原創
2017-06-26 09:51:481622瀏覽

描述

知道requirejs的都知道,每個頁面需要進行模組化開發都得有一個入口js檔案進行模組配置。但是現在就有一個很尷尬的問題,如果頁面很多的話,那麼這個data-main對應的入口檔案就會很多。理論這樣其實也沒什麼,但是到後面用grunt進行合併壓縮就會有很多入口js,雖然這個入口js都把配置的模組內容都壓縮到裡面了,但是各個入口合併壓縮後的文件中其實都有很多重合的程式碼,所以考慮到這個就想到把所以的入口文件都統一了,使用一個,到時候用grunt合併壓縮也只有這麼一個入口文件,也很方便。

實作原理

1.頁面引入requirejs 和設定id和目前頁面資訊的屬性

<script src="/res/js/require.js?1.1.11" 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;
});

以上是怎麼用requirejs模組化開發多頁面一個入口?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn