模塊化與requirejs

?首先,什么是模塊化?模塊化即將復雜的代碼切分成一個個模塊,不同功能的模塊各自放到單獨的文件中,使用模塊極大的提高了代碼的可維護性同時也可以避免全局空間的污染。

requirejs

?requirejs遵循AMD(異步模塊定義)規范,實現了JS文件的異步加載,避免頁面失去響應,管理頁面之間的依賴性,便于代碼編寫和維護,
?模塊通過define函數定義在閉包中,格式為:

  define(id?: String, dependencies?: String[], factory: Function|Object)

?id為模塊名(可選),dependencies(可選)為依賴的的多個模塊,由數組包裹,factory包裹模塊具體實現,可以是一個函數(此時返回值就是模塊的輸出)或對象(本身為模塊的輸出),一個簡單的requirejs實現:

html中:
  <script data-main="scripts/main.js" src="scripts/require.js"></script>
  //data-mian指定入口
入口js:
  require(["./exam1","./exam2"],function(exam1,exam2){
    console.log(exam1);        //{name:"tom",age:18}
    console.log(exam2);        //"今晚打老虎"
    })
exam1模塊:
  define({name:"tom",age:18})
exam2模塊:
  define(function(){
      return "今晚打老虎"
    })

模塊內部引用依賴

?前面提到define函數的三個參數,前兩個從參數(id,dependencies)都是可選,dependencies存在時,factory的參數為各模塊的返回值,而當dependencies不存在時,factory參數默認為require,exports,module,在factory內部可以通過require指定依賴:

a.js中:
define(function(require){
  var b=require("b")
  console.log(b)        //{name:"b"}
})
b.js中:
define({name:"b"})

依賴jQuery

?在入口js中編寫簡單配置:

requirejs.config({
  paths:{
    "jquery":"jquery-3.2.0"     
  }
})

require(["jquery"],function($){
  $("div").css("color","#f00")        //div中字體變色
})

?之后各個模塊就可以通過jqery這個名字來自己依賴jQuery了,除此之外,還可以在配置中使用shim配置模塊對jquery的依賴:

exam1.js中:
requirejs.config({
    paths:{
        "jquery":"jquery-3.2.0"
    },
    shim:{
        exam2:["jquery"],        //給模塊exam2配置jQuery的依賴
    }
})
require(["exam2"],function(){    //exam1中只指定了exam2的依賴
    $("div").css("color","#f00")    //字顏色變紅
})
exam2中:
define(function(){
    $("div").css("font-size","20px")    //字體到20px
})

?以上通過shim配置exam2.js模塊依賴jQuery,從而exam2.js中jQuery可以使用,依賴exam2.js的exam1.js中jQuery也可以使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前面一篇文章寫過一些模塊的原理和怎么實現模塊化,但是在具體的項目當中怎么實現呢。我們這里介紹下require的使用...
    avery1閱讀 754評論 0 0
  • 模塊化 模塊化是什么? 為什么要使用模塊化? 為了更好地復用 減少全局變量污染 解決功能之間的依賴關系 模塊化的實...
    getElementsByMK閱讀 468評論 0 1
  • 什么是requireJS? requireJS發揮的作用 簡單總結起來就2點 改善了用戶體驗,它使js文件異步加載...
    阿波羅程序猿閱讀 848評論 0 0
  • 1. 為什么要使用模塊化? 什么是模塊化:一個模塊就是實現特定功能的文件,有了模塊,我們就可以更方便地使用別人的...
    饑人谷_楠柒閱讀 1,041評論 0 1
  • 我:我在中山,你在哪? 女兒:我在姑媽家(跟外甥女說話了) 外婆在一旁,你在自己家呀 女兒:媽媽,哥哥呢? 我:哥...
    朵朵v閱讀 160評論 0 0