模塊化基礎(chǔ)

為什么要使用模塊化?

  1. 解決命名沖突,避免全局污染
  2. 解決依賴(lài)管理
  3. 提高代碼可讀性
  4. 代碼解耦,提高復(fù)用性

CMD、AMD、CommonJS 規(guī)范分別指什么?有哪些應(yīng)用

  • CMD即是Common Module Definition 通用模塊定義,主要是sea.js在推廣過(guò)程中對(duì)模塊化定義的規(guī)范化產(chǎn)出,中它推崇一個(gè)文件一個(gè)模塊,經(jīng)常用文件名做為模塊ID,以及推崇依賴(lài)就近,主要應(yīng)用為sea.js ,例子:
define(function(require,exports,module){
    var $ = require('jquery.js')
    $('div').addClass('active');
});
//cmd推崇就近依賴(lài),所以依賴(lài)寫(xiě)在函數(shù)中,require是一個(gè)方法,exports是一個(gè)對(duì)象,提供對(duì)外接口,module是一個(gè)對(duì)象,存儲(chǔ)與當(dāng)前模塊相關(guān)的屬性和方法。
  • AMD即是Asynchronous Module Definition 異步模塊定義,主要是require.js在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出,它解決了多個(gè)js文件的依賴(lài)問(wèn)題和加載js文件較多時(shí)的頁(yè)面等待問(wèn)題,推崇依賴(lài)前置,主要應(yīng)用為require.js,例子:
define('modal',['jQuery'],function($){
    $('modal').show();
})
//define為定義關(guān)鍵字,modal為定義的模塊名字,一般可以省略,[]內(nèi)為要加載的依賴(lài)模塊,緊跟回調(diào)函數(shù)。
  • CommonJS主要指的是運(yùn)行在瀏覽器端的模塊規(guī)范,主要應(yīng)用是node.js。
  • 一個(gè)文件對(duì)應(yīng)一個(gè)模塊,每一個(gè)模塊都是單獨(dú)的作用域,加載模塊是同步加載的。
  • 在一個(gè)模塊中只有一個(gè)出口,moudle.exports對(duì)象,將模塊希望輸出的對(duì)象放入該模塊。
  • 加載模塊使用require方法。例子:
//模塊定義  myMode.js

var name = 'jiuyi';

function printName(){
    console.log(name);
}

functionprintFullName(firstName){
    consoele.log(firstName+name);
}

module.erports = {
    printName: printName,
    printFullName: printFullName
}

//加載模塊

var nameModule = require('./myMode.js')

nameModule.printName();

如下requirejs配置中, baseUrl 有什么作用?以什么作為基準(zhǔn)? paths 的作用和用法是什么?

requirejs.config({
  baseUrl: "src/js",  
  paths: {
    'jquery': 'lib/bower_components/jquery/dist/jquery.min'
  }
});

baseUrl的作用是設(shè)置require加載JS文件的基礎(chǔ)路徑,以html所在的路徑為基準(zhǔn),paths作用是設(shè)置baseUrl基礎(chǔ)路徑之外,設(shè)置某些特定文件的路徑,以baseUrl路徑為基準(zhǔn)。


如下 r.js 的打包配置中 baseUrl 是什么? name 是什么

({
    baseUrl: "./src/js",
    paths: {
        'jquery': 'lib/bower_components/jquery/dist/jquery.min'
    },
    name: "main",
    out: "dist/js/merge.js"
})
  • 在這里baseUrl指的是以自身文件路徑為基準(zhǔn),尋找require.js的配置文件的baseUrl
  • name指的是入口的主模塊名字
  • out指的是打包輸出的路徑
  • 本博客版權(quán)歸羞澀的澀和饑人谷所有,轉(zhuǎn)載請(qǐng)注明出處
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 三種常見(jiàn)的JavaScript組織代碼的方式: IIFE 保留全局變量 由于JavaScript采用的是函數(shù)級(jí)作用...
    ltvieri閱讀 368評(píng)論 0 1
  • 問(wèn)答 1.為什么要使用模塊化? 網(wǎng)頁(yè)愈趨向Web應(yīng)用程序,導(dǎo)致JavaScript的體量愈來(lái)愈大,客戶(hù)端的代碼模塊...
    犯迷糊的小羊閱讀 1,096評(píng)論 0 0
  • JS中的模塊規(guī)范(CommonJS,AMD,CMD),如果你聽(tīng)過(guò)js模塊化這個(gè)東西,那么你就應(yīng)該聽(tīng)過(guò)或Common...
    小蝦米前端閱讀 4,472評(píng)論 0 12
  • ?Javascript不是一種模塊化編程語(yǔ)言,它不支持"類(lèi)"(class),更遑論"模塊"(module),然而模...
    果汁涼茶丶閱讀 1,178評(píng)論 0 6
  • .map map 方法會(huì)迭代數(shù)組中的每一個(gè)元素,并根據(jù)回調(diào)函數(shù)來(lái)處理每一個(gè)元素,最后返回一個(gè)新數(shù)組。 用 map ...
    這個(gè)是LOEY的微博閱讀 355評(píng)論 0 0

友情鏈接更多精彩內(nèi)容