模塊化_筆記

JS模塊化

  • 模塊化的理解
  • 什么是模塊?
    • 將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件), 并進(jìn)行組合在一起
    • 塊的內(nèi)部數(shù)據(jù)/實(shí)現(xiàn)是私有的, 只是向外部暴露一些接口(方法)與外部其它模塊通信
  • 一個(gè)模塊的組成
    • 數(shù)據(jù)--->內(nèi)部的屬性
    • 操作數(shù)據(jù)的行為--->內(nèi)部的函數(shù)
  • 模塊化
    • 編碼時(shí)是按照模塊一個(gè)一個(gè)編碼的, 整個(gè)項(xiàng)目就是一個(gè)模塊化的項(xiàng)目
  • 模塊化的進(jìn)化過程
    • 全局function模式 :
      • 編碼: 全局變量/函數(shù)
      • 問題: 污染全局命名空間, 容易引起命名沖突/數(shù)據(jù)不安全
    • namespace模式 :
      • 編碼: 將數(shù)據(jù)/行為封裝到對(duì)象中
      • 解決: 命名沖突(減少了全局變量)
      • 問題: 數(shù)據(jù)不安全(外部可以直接修改模塊內(nèi)部的數(shù)據(jù))
    • IIFE模式/增強(qiáng)
      • IIFE : 立即調(diào)用函數(shù)表達(dá)式--->匿名函數(shù)自調(diào)用
      • 編碼: 將數(shù)據(jù)和行為封裝到一個(gè)函數(shù)內(nèi)部, 通過給window添加屬性來向外暴露接口
      • 引入依賴: 通過函數(shù)形參來引入依賴模塊
        (function(window, module2){
          var data = 'atguigu.com'
          function foo() {
             module2.xxx()
             console.log('foo()'+data)
          }
          function bar() {
             console.log('bar()'+data)
          }
          
          window.module = {foo}
        })(window, module2)
        
  • 模塊化規(guī)范
    • CommonJS
      • Node.js : 服務(wù)器端
      • Browserify : 瀏覽器端 也稱為js的打包工具
      • 基本語法:
        • 定義暴露模塊 : exports
          exports.xxx = value
          module.exports = value
          
        引入模塊 : require
        var module = require('模塊名/模塊相對(duì)路徑')
        
      • 引入模塊發(fā)生在什么時(shí)候?
        • Node : 運(yùn)行時(shí), 動(dòng)態(tài)同步引入
        • Browserify : 在運(yùn)行前對(duì)模塊進(jìn)行編譯/轉(zhuǎn)譯/打包的處理(已經(jīng)將依賴的模塊包含進(jìn)來了),
          運(yùn)行的是打包生成的js, 運(yùn)行時(shí)不存在需要再從遠(yuǎn)程引入依賴模塊
    • AMD : 瀏覽器端
      • require.js
      • 基本語法
        • 定義暴露模塊: define([依賴模塊名], function(){return 模塊對(duì)象})
        • 引入模塊: require(['模塊1', '模塊2', '模塊3'], function(m1, m2){//使用模塊對(duì)象})
        • 配置:
          require.config({
            //基本路徑
            baseUrl : 'js/',
            //標(biāo)識(shí)名稱與路徑的映射
            paths : {
              '模塊1' : 'modules/模塊1',
              '模塊2' : 'modules/模塊2',
              'angular' : 'libs/angular',
              'angular-messages' : 'libs/angular-messages'
            },
            //非AMD的模塊
            shim : {
              'angular' : {
                  exports : 'angular'
              },
              'angular-messages' : {
                  exports : 'angular-messages',
                  deps : ['angular']
              }
            }
          })
          
    • CMD : 瀏覽器端
      • sea.js
      • 基本語法
        • 定義暴露模塊:
          define(function(require, module, exports){
            通過require引入依賴模塊
            通過module/exports來暴露模塊
            exports.xxx = value
          })
          
        • 使用模塊seajs.use(['模塊1', '模塊2'])
    • ES6
      • ES6內(nèi)置了模塊化的實(shí)現(xiàn)
      • 基本語法
        • 定義暴露模塊 : export

          • 暴露一個(gè)對(duì)象:
            export default 對(duì)象
            
          • 暴露多個(gè):
            export var xxx = value1
            export let yyy = value2
            
            var xxx = value1
            let yyy = value2
            export {xxx, yyy}
            
        • 引入使用模塊 : import

          • default模塊:
            import xxx  from '模塊路徑/模塊名'
            
          • 其它模塊
            import {xxx, yyy} from '模塊路徑/模塊名'
            import * as module1 from '模塊路徑/模塊名'
            
      • 問題: 所有瀏覽器還不能直接識(shí)別ES6模塊化的語法
      • 解決:
        • 使用Babel將ES6--->ES5(使用了CommonJS) ----瀏覽器還不能直接支行
        • 使用Browserify--->打包處理----瀏覽器可以運(yùn)行
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第一章:模塊化發(fā)展史 什么是模塊? 一個(gè)模塊的組成 模塊化 模塊化進(jìn)化史 1. 全局function模式 modu...
    楚金_86e4閱讀 361評(píng)論 0 0
  • 模塊化 1 什么是模塊化將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件), 并進(jìn)行組合在一起塊的內(nèi)部數(shù)據(jù)...
    Haiya_32ef閱讀 560評(píng)論 0 0
  • JS模塊化 模塊化的理解 什么是模塊?將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件), 并進(jìn)行組合在一...
    郝壯_7b3d閱讀 764評(píng)論 0 0
  • 模塊化的理解 什么是模塊? 將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件), 并進(jìn)行組合在一起;塊的內(nèi)...
    Promise_4483閱讀 260評(píng)論 0 1
  • 前言:前端模塊化出現(xiàn)的緣由和實(shí)現(xiàn)的一些弊端 出現(xiàn)的緣由 為什么會(huì)出現(xiàn)前端模塊化呢,要想實(shí)現(xiàn)功能的復(fù)用,就需要把代碼...
    zzglovecoding閱讀 2,467評(píng)論 0 7

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