前端模塊化 - 學習指南

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...