1. 程式人生 > >web前端模組化開發

web前端模組化開發

定義與由來

定義

模組就是實現特定功能的相互獨立的一組方法。

由來背景

隨著網站逐漸的開發,嵌入網頁的js程式碼越來越龐大,而網頁也越來越像桌面程式,需要一個團隊去分工協作,進行管理和測試等等。為了更好的管理網頁的業務邏輯,也就產生了模組化程式設計的理念。

為了讓開發者方便地載入各種模組,因此需要一套編寫模組的規範,而且目前通行的JavaScript的模組規範有兩種:CommonJS 和AMD。另外,在模組化開發問題上,一方面以AMD/CMD為代表的規範在過去幾年時間及大地提升了前端生產力。另一方面,隨著ES6,Web Components的臨近,開發者們面臨著承前啟後的巨大挑戰

。。。。這也給前端小夥伴帶來了新一輪知識學習挑戰。。。。呵呵,深入學習吧,且行且珍惜

模組載入器的作用

模組載入器主要是為了解決兩個問題:

  1. 實現js的非同步載入,避免網頁失去響應;
  2. 管理模組之間的依賴性,便於程式碼的維護和編寫

模組化的核心價值

程式碼複用;提升維護性也即是:公共模組通常用於促進程式碼複用;業務模組通常用於提升可維護性
在前端專案中經常使用的如JQuery,underscore.js等庫,其實可以看做是公共模組,他們對常用的、工具性的程式碼提供了抽象。

CommonJS規範

模組化開發對伺服器端開發是必須的,nodejs的模組系統就是參照CommonJS規範實現的。因此,可以理解為CommonJS即為伺服器端模組的規範。根據CommonJS的規範,一個單獨的檔案就是一個模組,載入模組使用require方法,該方法讀取一個檔案並執行,最後返回檔案內部的exports物件。另外,CommonJS規範載入模組是同步的,只有載入完成,才能執行。由於Node.js主要用於伺服器端程式設計,模組檔案一般都已經存在本地硬碟,所以載入起來比較快,不用考慮非同步載入方式,所以CommonJS規範比較適合。但是,如果是瀏覽器環境,要從伺服器端載入模組,這時就需要採用非同步模式,因此,瀏覽器段一般都是採用AMD/CMD規範

commonJS期望用其API寫出的應用可以具備跨宿主環境執行的能力,這樣不僅可以利用js開發富客戶端應用,而且還可以編寫以下應用:

  1. 伺服器端js應用程式
  2. 命令列工具
  3. 桌面圖形介面應用程式
  4. 混合應用(Titanium 和 Adobe AIR等形式的應用)
    commonJS規範涵蓋了模組、二進位制、Buffer、字符集編碼、I/O流、程序環境、檔案系統、套接字、單元測試、Web伺服器閘道器介面、包管理等

AMD規範

AMD即能在客戶端環境,並且能相容伺服器端模組的一種模組規範。

AMD規範使用define定義模組,例子如下:

define(['package/lib'
],funciton(lib){ funciton foo (){ lib.log("hehe"); } return { foo : foo }; });

define的第一個引數表示依賴的模組陣列,第二個為載入完依賴的模組陣列後,模組執行函式

AMD模組載入定義,require方法

與CommonJS一樣,AMD也採用require()語句載入模組,但是不同的是有兩個引數:require([module],callback);

第一個引數[module]是一個數組,其成員就是要載入的模組;

第二個引數callback,則是載入成功後的回撥函式。

require(['package/moduleA'],funciton(moduleA){
    moduleA.add(3,4);
});

moduleA.add()與moduleA模組載入不是同步的,十分適合瀏覽器的環境.引入AMD規範的js庫實現目前主要有兩個:require.js 和curl.js

requireJS 與SeaJS

相同之處

兩者都是模組載入器,倡導模組化開發理念,核心價值都是讓JavaScript的模組化開發變得簡單自然。

不同之處

  1. **定位有差異,**RequireJS想成為瀏覽器段的模組載入器,同時也形成為Rhino/node等環境的模組載入器;SeaJS則專注於web瀏覽器端,同時通過Node擴充套件的方式可以很方便地跑在Node環境中。
  2. 遵循的規範不同,RequireJS遵循AMD(非同步模組定義)規範,seaJS遵循CMD(通用模組定義)規範。規範的不同,導致了兩者API不同。SeaJS更貼近 CommonJS Modules/1.1 和Node Modules規範。
  3. 推廣理念有差異,RequireJS在嘗試讓第三方庫修改自身支援RequireJS,目前只有少數社群採納。SeaJS不強推,採用自主封裝的正規化來“海納百川”,目前已有成熟的封裝策略。
  4. 對開發除錯的支援有差異,SeaJS非常關注程式碼的開發除錯,有nocache、debug等用於除錯的外掛。RequireJS無這方面的明顯支援。
  5. 外掛機制不同,RequireJS採取的是在原始碼中預留介面的形式,外掛型別比較單一。SeaJS採取的是通用事件機制,外掛型別更豐富。

相關推薦

web前端模組開發

定義與由來 定義 模組就是實現特定功能的相互獨立的一組方法。 由來背景 隨著網站逐漸的開發,嵌入網頁的js程式碼越來越龐大,而網頁也越來越像桌面程式,需要一個團隊去分工協作,進行管理和測試等等。為了更好的管理網頁的業務邏輯,也就產生了模組化

WEB 前端模組都有什麼?

前言 說到前端模組化,你第一時間能想到的是什麼?Webpack?ES6 Module?還有嗎?我們一起來看一下下圖。 相信大夥兒對上圖的單詞都不陌生,可能用過、看過或者是隻是聽過。那你能不能用一張圖梳理清楚上述所有詞彙之間的關係呢?我們日常編寫程式碼的時候,又和他們之間的誰誰誰有關係呢?

WEB 前端模組,讀文筆記

文章連結 WEB 前端模組化都有什麼? 知識點 根據平臺劃分 瀏覽器 AMD、CMD 存在網路瓶頸,使用非同步載入 非瀏覽器 CommonJS 直接操作 IO,同步載入 瀏覽器 AMD 依賴前置 requirejs CMD 就近依賴 seajs AMD 與 CMD 都是在頁面初始化時載入

前端模組開發規範之AMD(可不是處理器哦!)

首先強調下,我們這裡提到的AMD可不是計算機的處理器哦! 繼CommonJS之後,雙出現了一種非同步載入模組的方法。就是AMD,全稱為:Asynchronous module definition。 它的使用方法依然很簡單。 定義一個模組: define('user', ['

前端模組開發規範之ES6

直接上程式碼啦! 匯入 import { getList } from './userService' 或者 import userService from './userService' 匯出 export default { userService }

前端模組開發規範的終結者Webpack詳解(純乾貨,不套路)

可謂集CommonJS、AMD、ES6等多種特性於一身,靈活、易用、高擴充套件性、效能優越。 核心配置 以下是webpack的幾個核心配置節: 節點 說明 entry 指定要打包的檔案

前端模組開發規範之CommonJS

CommonJS是前端模組化發展過程中出現的第一個規範。其使用方式也是相當簡便的。 以下是匯入和匯出的兩個關鍵片斷。 1、匯入 const user = require('./user'); 2、匯出 module.exports = user.getList;

HTML5前端教程分享:前端模組開發

1. 命名衝突 首先從一個簡單的習慣開始。 由於以前一直做 JavaEE 開發的緣故,在 JavaScript 開發中,我已經習慣將專案中的一些通用功能抽象出來,形成一個個的獨立函式,以便於實現程式碼複用,如: function css(element, attr

WEB前端模組基礎知識

前段模組化基礎 概念 前端模組化其實就是將一個完整的單一的功能整合起來形成單獨的一個功能元件,當需要用的的時候只需要載入這個元件,然後便可以通過該元件唯一的名稱去使用其中的內容。 主流模組化框架 commonJS AMD CMD UMD ES6規範

聊聊前端模組開發

隨著JavaScript開發變得越來越普遍,名稱空間和依賴性變得越來越難以處理。前端開發者都以模組化的方式處理該問題。在這篇文章中,我們將探討前端開發人員目前使用的模組化方案以及試圖解決的問題。 為什麼需要JavaScript模組? 模組化可以使你的程式碼低耦合,功能模組直接不相互影響。 可維護性:每個模組

前端刀耕火種到模組開發

為什麼要模組化開發: 前端的模式完善在像後端看齊。速途同歸。 讀懂這篇文章: 前端模組化的誕生: CommonJS: 2009年,美國程式設計師Ryan Dahl創造了node.js專案,將javascript語言用於伺服器端程式設計。這標誌"Javascrip

前端模組、元件開發

使用過ReactJS進行Web UI的元件化開發,和使用過AngularJS的雙向資料繫結和模組化後,感覺到了元件化、模組化、雙向資料繫結對Web前端開發的重要性。 1、元件化可以極大提高前端程式碼的可維護性,前端的元件化簡單的可以理解為一塊HTML元素和一段

web前端基礎案例-開發QQ空間旋轉時光軸

前端 案例 源碼 編程 javascript 知識點:html標簽,css樣式屬性,代碼優化,行業規範,布局思路,javascript基礎,jquery方法,邏輯思維。html代碼: <div class="con"> <div class="to

web前端實用案例-開發餓了麽LBS移動地圖點餐系統

前端 javascript 餓了麽 點餐 LBS 知識點:html/css,標簽運用、樣式講解、靜態開發布局、行業標準。JS基礎、if判斷、jq方法 Dom操作、邏輯思維。 html代碼: <div class="top"> <div class=

前端模組-5分鐘快速入門RequireJs

各位開發專案的時候引用JS都會遇到以下的情景 產生AMD規範的背景 因為使用各種外掛,或者團隊協同合作,產生多個js檔案, 假如使用的JQ外掛,則必須先引用jquery庫才能夠正常執行, JS檔案之間強依賴關係,讓我們不敢動檔案的引入順序。 並且,在渲染頁面的過程中,同步讀取JS檔案會

js-模組開發總結

一.模組開發的概念 模組化開發是什麼:模組化開發是一種生產方式,這種方式生產效率高,維護成本低。從軟體開發的角度說,模組化開發是一種開發模式,寫程式碼的一種方式,開發效率高,維護成本低。 為什麼需要模組化開發:當一個專案開發的越來越複雜的時候,會遇到一些問題,比如命名衝突(重新命名),檔

模組開發(requireJS)

模組化 在前端使用模組化開發,可以將程式碼根據功能實施模組的劃分,每個模組功能(職責)單一,在需要更改對應的功能的時候,只需要對指定的模組進行修改,其他模組不受任何影響。 為什麼要進行前端模組化? 達到公共模組的複用 可以很好的解決全域性變數汙染的問題 可以很好的解決各個功能之間的依賴關係

javascript 模組開發

一、為什麼會有模組化 1. 當一個專案開發的越來越複雜的時候,會遇到一些問題,比如: 命名衝突:當專案由團隊進行協作開發的時候,不同開發人員的變數和函式命名可能相同;即使是一個開發,當開發週期比較長的時候,也有可能會忘記之前使用了什麼變數,從而導致重複命名,導致命

沒有前戲,簡明扼要的進入主題——什麼是模組開發

模組化開發,一個模組就是一個實現特定功能的檔案,有了模組我們就可以更方便的使用別人的程式碼,要用什麼功能就載入什麼模組。 模組化開發的4點好處:   1 避免變數汙染,命名衝突   2  提高程式碼複用率   3 提高維護性   4 依賴關係的管理

初識模組開發工具:

初識模組化開發工具:git 是分散式程式碼管理工具,管理程式碼的npm 是包管理工具,管理外掛、工具啊,是個轉換器,他是哪來的了,他是伴隨node下載下來的,版本也是伴隨node變化;node 是個後臺的環境;首先安裝node,然後用命令安裝browserify:npm install -g browseri