1. 程式人生 > >JS 模組化規範

JS 模組化規範

在我們最初寫程式碼的時候,引入JS檔案用script標籤來引入,並且在引入多個JS檔案時,當前檔案所依賴的JS檔案必須放在前面。也就存在一個順序的問題,而且這是由開發者去判斷和把控的。而現在前端專案越來越複雜,難免會出現很多很多script標籤引入JS,這無論對於開發和維護都有著一定的缺點。所以出現了模組化的概念。

模組化的形式有很多中,比如把某個特定功能封裝成一個函式,但是存在著一個問題,很有可能會出現命名衝突等問題。針對這種問題,又有了物件的方式來模組化,這種不會出現命名衝突,但是外界卻可以改變物件內的成員。又有了下面這種方式:

var obj = (function(){
    var
name = 'liu'; var job = 'Web developer'; function sayName() { console.log(name + ' is a ' + job); } return { sayName: sayName } })()

這樣外界就不會修改沒有暴露出來的物件內的變數。
上面這些是前端模組化的基礎。目前通用的模組化規範主要有COMMONJSAMDCMD等等。

COMMONJS

COMMONJS主要是用於服務端的模組化規範,可以說NodeJS是它的最佳實踐。看下面一個例子:

//匯入一個檔案系統模組,返回的是一個物件;
var fs = require('fs');
//呼叫物件的readFile方法,讀檔案。
fs.readFile('test.txt', function(data){
    console.log(data);
});

上面是一個讀檔案的操作,主要引入檔案系統模組,這個是一個同步的過程。

當然,也可以自定義一個模組實現特定的功能。比如要實現一個Multi模組,可以這樣來實現:

//multi.js
function multi(a ,b) {
    return a*b;
}

module.exports = {
    multi: multi
}
//moduleTest.js
var obj = require('./multi.js');

var res = obj.multi(3, 4);

console.log(res);

結果如下:
這裡寫圖片描述

AMD

上面的COMMONJS規範不適合瀏覽器端的模組化開發,因為COMMONJS去請求模組是一個同步的過程,如果瀏覽器用這種規範去開發很可能會出現阻塞情況/假死情況。因此AMD規範就是為解決這種情況而出現的。
由於不是原生JS所支援的,所以AMD規範需要用到RequireJS庫。
AMD的用法如下:
定義模組: define([依賴的模組], function(){ //自定義模組 });
引入模組:require([依賴的模組], function(){ //回撥 })

在這裡,需要說明的一點是:RequireJS是依賴前置,先去執行依賴的模組,然後再執行當前模組。

CMD

CMD典型的就是SeaJSSeaJSRequireJS實現上是差不多的,但是還是有一些區別,主要是在定義方式上和模組的執行時機上。
定義模組: define(function( require, exports, module ){ })
可以看到,SeaJS在定義模組的時候,並不會像RequireJS那樣依賴前置,而是就近依賴的原則,需要的時候再去requireSeaJS主要是對模組先載入不執行,等到遇到require的時候才會去執行模組。
對於RequireJSSeaJS的差異可以看下面這個例子:

//c.js
define(function(require, exports, module){
    console.log('c Module');
    require('./b.js');
    console.log('c module finished');
})
//b.js
define(function(require, exports, module){
    console.log('b Module');
    require('./a.js');
    console.log('b module finished');
})
//a.js
define(function(require, exports, module){
    console.log('a Module');
})
//html檔案
//requirejs檔案部分程式碼
<script src="require.min.js" data-main="c.js"></script>  
//SeaJs檔案部分程式碼
<script src="Sea.js"></script>
<script>seajs.use('./c');  </script>  

大家可以猜猜兩種執行結果有什麼不同,這裡就不做驗證了。

上面這些就是JS模組化的通用方法總結,當然,ES6中已經有了Module模組化的概念,後面還會再對這個進行整理。

相關推薦

js 模組規範(commonjs、AMD、ES6、CMD)

開發中最流行的 commonjs、AMD、ES6、CMD 規範。 參考資料: https://mp.weixin.qq.com/s/MPEhWlS9KiIc9I6Of5GpOQ http://www.ruanyifeng.com/blog/2015/05/commonjs-in-

JS模組規範:AMD/CMD/CommonJS

一、模組化規範的由來 隨著網頁的複雜化,javascript程式碼也相應變得龐大起來,程式碼之間的分工合作就尤為重要了,這時候有了模組,我們就可以只關注自己業務的核心邏輯,其他想要實現的功能直接載入他人的模組便足夠了。考慮到模組的統一,便有了模組規範化。接下來

JS 模組規範

在我們最初寫程式碼的時候,引入JS檔案用script標籤來引入,並且在引入多個JS檔案時,當前檔案所依賴的JS檔案必須放在前面。也就存在一個順序的問題,而且這是由開發者去判斷和把控的。而現在前端專案越來越複雜,難免會出現很多很多script標籤引入JS,這無論對

Js模組規範理解

export const obj = { test1: '' } export const test = '' exrpot class Test { constuctor() { } } 或者是下邊的寫法 var name = "name" var age = "age" e

JS模組開發規範

JS模組化開發規範,以下介紹三種 commonJS規範(Nodejs模組系統遵循此規範,適用於服務端) 1、 規範定義 CommonJS規範規定,一個檔案就是一個模組,用module變數代表當前模組。 Node在其內部提供一個Module的構建函式。所有模組都是Module的例項 2、 module.ex

JS模組程式設計之AMD規範(一)

隨著網站逐漸變成"網際網路應用程式",嵌入網頁的Javascript程式碼越來越龐大,越來越複雜。 網頁越來越像桌面程式,需要一個團隊分工協作、進度管理、單元測試等等......開發者不得不使用軟體工程的方法,管理網頁的業務邏輯。 JavaScript模組化程式設

一文徹底搞懂JS前端5大模組規範及其區別

## 碼文不易,轉載請帶上本文連結,感謝~ https://www.cnblogs.com/echoyya/p/14577243.html [toc] 在開發以及面試中,總是會遇到有關模組化相關的問題,始終不是很明白,不得要領,例如以下問題,回答起來也是模稜兩可,希望通過這篇文章,能夠讓大家瞭解十之一二,

js-模組開發總結

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

JS模組(Module模式模組,SeaJS工具模組)

1、Module模式模組化 Module模式具有模組化,可重用的基本特徵,封裝了變數和function,只暴露可用public的方法,其它私有方法全部隱藏。在沒有使用模組化工具的情況下,用模組化的思想來編寫整個JS結構。 例如下圖,以webrtcUI層程式碼為例,MeetingMainPag

require-js-模組 CMD AMD

模組化的標準有了模組,我們就可以更方便地使用別人的程式碼,想要什麼功能,就載入什麼模組。這樣做有一個前提,那就是大家必須以同樣的方式編寫模組,否則你有你的寫法,我有我的寫法,豈不是亂了套!  CommonJS:是一個模組化的標準,Node.js在使用的模組化標準。適用與後端開發的標準。AMD(As

點選按鈕刪除bootstrapTable選中行,js模組及一些問題的總結

頁面效果展示 html程式碼: <div class="col-md-12" style="height: 15%"> <form action="web?module=stwmgr&action=Develop&method=se

JS模組(一):CommonJS

模組化的規範:         目前有四種:             1.CommonJS      &nbs

node.js模組思想初探

系統模組(核心模組):node本身自帶,可以直接require的模組 自定義模組:自己寫的,以及在npm上下載的模組 一部分常用的系統模組的作用(印象) Crypto 加密 Events 事件 Net 網路操作 OS 作業系統資訊 Path 處理檔案路徑 S

【requirejs】JS模組工具requirejs教程

初識requirejs 隨著網站功能逐漸豐富,網頁中的js也變得越來越複雜和臃腫,原有通過script標籤來匯入一個個的js檔案這種方式已經不能滿足現在網際網路開發模式,我們需要團隊協作、模組複用、單元測試等等一系列複雜的需求。 RequireJS是一個非常小巧的JavaScript模組載入框架,是A

一覽js模組:從CommonJS到ES6

本文由雲+社群發表 模組化是指把一個複雜的系統分解到一個一個的模組。 模組化開發的優點: (1)程式碼複用,讓我們更方便地進行程式碼管理、同時也便於後面程式碼的修改和維護。 (2)一個單獨的檔案就是一個模組,是一個單獨的作用域,只向外暴露特定的變數和函式。這樣可以避免汙染全域性變數,減少變數

JS模組程式設計之AMD模型實現原理(Requirejs瀏覽器模型,nodejs伺服器模型)

官方引數手冊:https://requirejs.org/docs/api.html     /** * require使用指南! * 第一步:建立一個符合Require CMD模組化的標準目錄結構,去官方檢視! * 第二步:在html檔案中指定主js檔

JS模組之歷史演進

為什麼迫切需要js模組化 隨著2006年ajax概念被提出,前端的業務的業務越來越多,程式碼也越來越多,並逐漸發展成為前後端分離的狀態,出現了專門的前端攻城獅。 但是隨著程式碼的增多,也隨之衍生很多問題。 1.早期的js程式碼: common.js let mo

模組規範之commenJS、AMD、CMD、ES6

commenJS(Node.js基於commenJS規範編寫) 理解 每個檔案都可以當作一個模組 在伺服器端(Node):模組的載入是在執行時同步載入的 在瀏覽器端(Browserify):模組需要提前編譯打包處理 基本語法 暴露模組(暴露出

JS模組程式設計總結

一、背景 隨著的網際網路技術的不斷髮展,瀏覽器逐漸成了集大成的CS客戶端,頁面功能在向系統級、軟體級靠攏的趨勢下,開發團隊也需要一些軟體工程的方法來開發WEB專案,如測試驅動、面向物件,而模組化程式設計更是成為一種急需應用的技術。 二、原因 為方便檔案管理、增加複用

js模組程序

模組化程序 模組就是實現特定功能的一組方法。 1、無模組時代:通過script標籤來匯入一個個的js檔案,而一個js檔案中,程式碼簡單的堆在一起,把不同的函式簡單地放在一起,就算是一個模組,只要能從上往下依次執行就可以了。帶來的問題是:全域性變數命名衝突、模