前端模塊化 - 學習指南

来源:https://www.cnblogs.com/jinfeixiang/archive/2019/07/04/11135032.html
-Advertisement-
Play Games

1.前端模塊化 js模塊化提供幾種規範 1.commonjs 規範 代表的就是 onde 適合後臺開發 因為是同步的,伺服器是運行比較快等待時間不長,common.js 不適合用於前端,前端客戶端是瀏覽器,瀏覽器追求的是非同步載入,瀏覽器不能等太長時間。 2.前端模塊的規範是 Amd 規範 代表的就是 ...


1.前端模塊化

js模塊化提供幾種規範

1.commonjs 規範 代表的就是  onde  適合後臺開發 因為是同步的,伺服器是運行比較快等待時間不長,common.js 不適合用於前端,前端客戶端是瀏覽器,瀏覽器追求的是非同步載入,瀏覽器不能等太長時間。

2.前端模塊的規範是  Amd  規範  代表的就是 requires,它是非同步的,很多前端框架都是用的是  Amd 規範  比如  jquery  angular

3.  第三個模塊規範是  es6

2.模塊化的操作

1.commonjs 的操作

所有的模塊化都是兩個方向,暴露模塊介面和引入模塊

module.exports={} 暴露本質是一個 exports 的對象

require(路徑)引入一個模塊

以上是後臺的  在後臺 node 可以直接運行,在客戶端(瀏覽器)不能運行,需要對文件打包解析。

打包工具:webpack gulp

前端模塊:不借用任何規範自己怎麼寫?

自定義前端模塊

案例分析:

定義一個feixiang模塊沒有任何依賴,在定義一個huiting模塊,這個模塊要依賴feixiang模塊,然後再定義主文件 index.js 它依賴hiuting模塊

1.定義不依賴其它模塊

(function(){
//    定義一個feixiang模塊
    var name="hello 模塊一"
    
    function getName(){
        console.log(name)
    }
//    暴露模塊,需要後面的所有js文件都能訪問這個模塊,唯一的方法,將該模塊註冊在window下
    window.feixiang={//暴露模塊名字是feixiang
        getName:getName//這是暴露的屬性
    }
})(window)
/*
 * 為什麼加自調用函數?
 * 因為自調用函數執行會形成一個私有作用域,私有作用域對內部變數進行保護
 * 
 */

 

2.定義依賴其它模塊

(function(window,feixiang){
    var name="1807 第二個模塊"
    function show(){
        console.log(name)
    }
    function yilai(){
//        這個方法來自於飛翔模塊
//        怎麼引入?
        feixiang.getName()
    }
    console.log(feixiang.getName())
    //暴露會婷模塊介面,等於暴露了兩個介面
    window.huiting={
        show:show,
        yilai:yilai
    }
    
})(window,feixiang)
//將飛翔模塊註入會婷模塊里

 

在主文件中引入這兩個模塊

(function(window,huiting){
    huiting.show()
    huiting.yilai()
})(window,huiting)

 

HTML文件

註意事項:

1.依賴關係千萬不能出錯

這種模塊的缺點,會發送多次請求,但依賴關係不能放錯順序

3.前端模塊化規範 amd

Amd 是前端模塊的一種規範,全程 async module definition 非同步模塊載入機制,是一個規範(標準),所有需要按照這個規範去定義模塊和使用模塊

1.require 提供了一個一個全局方法 叫 define() 用來定義模塊

定義模塊分兩種:

  1.不依賴其它模塊

  2.依賴其它模塊

定義不依賴其它模塊

//如果不依賴其它模塊 參數就是一個函數
define(function(){
    var mod="我是mod1"
    
    function mod1(){
        return mod
    }
//    return 暴露介面
    return{
        mod1:mod1
    }
})

定義依賴其它模塊

//定義mod2模塊,依賴mod1模塊
define(["mm1","jquery"],function(mjiaozi,$){
//    []數組就是這個需要依賴的模塊
    function getMes(){//列印mod1裡面數據
        console.log(mjiaozi.mod1())
        $("#div").css("background","red")
    }
    //暴露介面
    return{
        getMes:getMes
    }
})

如何使用這倆模塊

在主文件分兩部分,一部分是配置模塊,一部分使用模塊

 

//引入模塊
//第一對模塊進行配置
    requirejs.config({
//        baseUrl:"require",//配置查找到根目錄
//        配置模塊名稱,和路徑.屬性是模塊名
        paths:{
            "mm1":"./module/mod1", //不能帶尾碼名,自己會預設後面有尾碼名
            "mm2":"./module/mod2",
            "jquery":"./js/jquery-3.3.1"
        }
    })
//第二對模塊進行配置
    require(["mm2"],function(mod2s){
        mod2s.getMes()
    })

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 兩種用法 一樣, 查詢欄位類型需要一致 union 會自動去重 union all 不會去重 ...
  • 在實際的生產中,考慮的實際情況,我們會調整一些預設配置,例如,數據目錄。InfluxDB修改預設的Data目錄後,因許可權問題,服務無法正常運行。以下是具體的分析測試過程。 配置文件為 /etc/influxdb/influxdb.conf,關於數據存放的預設配置如下: 調整後的配置: 啟動influ ...
  • Oracle 資料庫表中已有重覆數據添加唯一鍵(唯一約束) 問題描述 以 demo 舉例,模擬真實場景。 表 TEST_TABLE 有如下欄位和數據:id 是主鍵,code 沒有設置鍵和索引 ID | CODE | 1 | code1 2 | code2 3 | code2 4 | code2 5 ...
  • https://juejin.im/post/5c91ac636fb9a071012a0c28 詳述MySQL主從複製原理及配置主從的完整步驟 innodb引擎的4大特性 事物的4種隔離級別 sql語句分類 事務是如何通過日誌來實現的 MySQL資料庫幾個基本的索引類型:普通索引、唯一索引、主鍵索引 ...
  • 學習筆記:非原著 ...
  • select語法: select [distinct|all] 列名 from 表名 [where] [group by] [having] [order by] ps:[] 表示可以省略 舉幾個慄子: select * from emp; ps:* 表示所有欄位即把要查詢的表的所有欄位都顯示出來, ...
  • 前言: 在實際工作中,我們可能會遇到需要操作其他資料庫實例的部分表,但又不想系統連接多庫。此時我們就需要用到數據表映射。如同Oracle中的DBlink一般,使用過Oracle DBlink資料庫鏈接的人都知道可以跨實例來進行數據查詢,同樣的,Mysql自帶的FEDERATED引擎完美的幫我們解決了 ...
  • 前言 關係資料庫通常會使用一個主伺服器向多個從伺服器發送更新,並使用從伺服器來處理所有的讀請求,Redis採用了同樣方法來實現自己的複製特性。 簡單總結起來就是:在接收到主伺服器發送的數據初始副本之後,客戶端每次主伺服器進行寫命令時,從伺服器都會實時地得到更新。部署好主從伺服器之後,客戶端可以向任意 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...