JS模塊化

来源:https://www.cnblogs.com/lihuijuan/archive/2018/07/10/9284100.html
-Advertisement-
Play Games

一、理解 1、什麼是模塊、模塊化? 將一個複雜的程式依據一定的規範封裝成幾個文件,併進行組合在一起 2、為什麼要模塊化? 降低複雜度,提高解耦性,部署方便 3、模塊化的好處 避免命名衝突(減少命名空間污染) 更好的分離,按需載入 更高復用性 高可維護性 4、頁面引入載入script 二、模塊化規範 ...


一、理解

1、什麼是模塊、模塊化?

將一個複雜的程式依據一定的規範封裝成幾個文件,併進行組合在一起

2、為什麼要模塊化?

降低複雜度,提高解耦性,部署方便

3、模塊化的好處

  • 避免命名衝突(減少命名空間污染)
  • 更好的分離,按需載入
  • 更高復用性
  • 高可維護性

4、頁面引入載入script

 

二、模塊化規範

1、CommonJS(node根據該規範編寫)

說明:

每一個文件都可以當做一個模塊

在伺服器端:模塊的載入 是運行時同步載入的

在瀏覽器端:模塊需要提前編譯打包處理

基本語法:

模塊引入:require(xxx)

  第三方模塊:xxx為模塊名

  自定義模塊:xxx為模塊文件路徑

暴露模塊:exports.xxx = value 和 module.exports = value

  暴露的模塊 本質是 exports 對象  

  exports本身是一個空對象 exports.xxx = value是給exports對象添加屬性或方法

  module.exports = value 是直接用value新對象來覆蓋原來的空對象

實現:

伺服器端實現:Node.js

瀏覽器端實現:Browserify (CommonJS的瀏覽器端的打包工具)

下載安裝browserify

  全局:npm install browserify -g

  局部:npm install browserify --save-dev

定義模塊代碼(js文件代碼 並暴露相應內容)

引入模塊  在app.js 中用require引入模塊 但是瀏覽器不認識require方法,需要打包處理js

  在根目錄下 終端輸入 browserify js/src/app.js -o js/dist/bundle.js  (js/src/app.js源文件 js/dist/bundle.js 是打包輸出的文件)

頁面使用引入:

<script type="text/javascript" src="js/dist/bundle.js"></script> (瀏覽器真正跑的是打包生成的文件)

 

 

2、AMD

說明:

專門用於瀏覽器端的模塊化規範,模塊的載入是非同步的

基本語法:

定義暴露模塊:

  //定義沒有依賴的模塊:

  define(function(){

    return 模塊

  })

  //定義有依賴的模塊:

  define(['module1','module2'],function(m1,m2){

    return 模塊

  })

引入使用模塊:

   require(['module1','module2'],function(m1,m2){

    使用m1/m2

  })

實現(瀏覽器端):

Require.js

3、CMD(瞭解)

說明:專門用於瀏覽器端,模塊的載入是非同步的,模塊使用時才會載入執行

基本語法:

定義暴露模塊:

  //定義沒有依賴的模塊:

  define(function(require,exports,module){

    exports.xxx = value

    module.exports = value

  })

  //定義有依賴的模塊:

  define(function(require,exports,module){

    //引入依賴模塊(同步)

    var module2 = require("./module2")

    //引入依賴模塊(非同步)

    require.async("./module3",function(m3){

    })

    //暴露模塊

    exports.xxx = value

  })

引入使用模塊:

   require(function(require){

    var m1 = require('./module1')

    var m4 = require('./module4')

    m1.show()

    m4.show()

  })

實現(瀏覽器端):Sea.js

4、ES6

說明:依賴模塊需要編譯打包處理

語法:

  導出模塊:export xxx

  引入模塊:import  xxx from "url"

頁面引入

實現(瀏覽器端):

  使用Babel將ES6編譯為ES5代碼

  使用Browserify編譯打包js

 


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

-Advertisement-
Play Games
更多相關文章
  • 目錄 1、徑向漸變 2、 線性漸變 3、 背景圖片裁剪 4、 背景圖片大小 5、 邊框圖片 6、 邊框圓角 7、 邊框陰影 8、位移 9、 傾斜 10、 旋轉 11、 縮放 12、 文本換行 13、 文本溢出 1、徑向漸變 8、位移 2018-07-10 20:26:02 擢摩一下改 於教室 ...
  • 剛入門vue ,打算用vue的腳手架做一個小項目。需要用到第三方的api,無奈遇到各種各樣的問題。 比如 Access-Control-Allow-Origin ,或者使用了ajax的jsonp模式之後也會出現個別api不相容這個模式而出現另一個錯誤。還有的需要修改後端php之類的,頭大。 後來又聽 ...
  • snowfall.jquery.js是樹葉等圖片飄落的插件,但是只支持一種圖片的飄落效果,但是我遇到的情況需要飄落未知數種類的圖片,即圖片有多種;那麼就要對原插件做些修改; 在原snowfall.js找到下麵代碼: 將上面代碼修改成: 修改前原插件中的 options.image是一個圖片地址,修改 ...
  • 前端使用easyui框架,後端使用JAVA 的JFinal框架開發 功能描述:實現附件上傳功能。文件上傳路徑為:。。/upload(上傳文件夾)/身份證號/慢病編碼/上傳的附件。 細節要求:實現多圖片上傳,上傳後可在前臺頁面實現二次增加和刪除 1.前臺頁面顯示:填寫身份證號、選擇慢病信息,點擊“上傳 ...
  • Reverse a String(翻轉字元串) 把字元串轉化成數組 藉助數組的reverse方法翻轉數組順序 把數組轉化成字元串 用.split('')將字元串轉換成單個字母組成的數組 用.reverse()把數組反轉 用.join('')把數組元素連接成字元串 .split()方法:http:// ...
  • 概念:立即執行函數顧名思義就是函數定義好之後立即執行。函數表達式方式:函數表達式後面加括弧()即可立即執行函數。 var xmlhttpUtil = function () { function getText(url,callback){ alert("dog"); }(); 匿名函數方式:匿名函... ...
  • 1. 瀏覽器載入 (1) 同步載入 在網頁中,瀏覽器載入js文件的方式是通過<script>標簽。如下所示: <script>標簽很方便,只要加入後,瀏覽器便可讀取並運行,但是在讀取的時候,瀏覽器是按照<script>標簽的出現順序,讀取Javascript文件,然後立即運行,導致在多個文件相互依賴 ...
  • 1.評估功能變數名稱類型 .com——商業實體 .edu——僅限有學位或更高等學歷授予資格的高等教育使用 .gov——僅限政府使用 .net——與Internrt網路支持相關的團體,通常是Internet服務提供商或者電信公司 .org——非盈利組織 2.HTML -HTML是一套標記符號或者代碼集,他們插 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...