使用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;
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM