JavaScript模組化程式設計規範
當一個網站複雜度較高需要多人協作開發時,傳統的非模組化程式設計模式容易導致程式碼衝突和依賴等問題,而模組化程式設計的誕生正是為了解決此類問題。然而,在ES6之前,原生JavaScript是不支援模組化的,因此就出現了一系列的JavaScript庫來實現此功能,這些庫主要遵循以下三種規範:
① CommonJS
② AMD
③ CMD
接下來我就粗略地講講這三種規範。
一、CommonJS規範
關鍵詞: module,exports,require
CommonJS規範下的模組呼叫是同步的,也就是說必須等模組載入完成之後,接下來的程式碼才能繼續執行。因此,該規範主要適用於服務端,因為服務端可以直接從硬碟中呼叫所需要的模組,而這個過程速度是非常快的。相比之下,通過網路呼叫所需模組的瀏覽器客戶端則不適合使用該規範。
目前使用該規範的典型代表有:Node.js、微信小程式。
下面以Node.js中的兩個小例子,簡單講講CommonJS規範下的模組化程式設計。
1. 無返回值的模組呼叫
//module.js
console.log(`這是一個模組。`);
//main.js
require(`./module`); // 或寫成 require(`./module.js`),但千萬注意不能寫成 require(`module`)
以上module.js和main.js兩個檔案處於同一目錄下。
2. 有返回值的模組呼叫
//module.js
function foo(){
console.log(`這是一個模組。`);
}
module.exports = { // 此處提供模組對外介面
foo: foo // 此處對外介面中的方法名不一定要與以上定義的方法名一致,比如可以寫成 func: foo,那麼此時呼叫時就應該寫成 module.func()
};
//main.js
var module = require(`./module.js`); // 載入module模組
module.foo(); // 此處呼叫module模組下的foo方法,該方法名須與模組中對外介面方法名一致
二、AMD規範
關鍵詞: define,require
與CommonJS不同,AMD規範下的模組呼叫是非同步的,主要適用於瀏覽器客戶端。
目前使用該規範的典型代表有:require.js、curl.js。
下面以require.js為例,簡單講講AMD規範下的模組化程式設計。
<!--HTML-->
<script src="scripts/require.js"></script>
<script src="scripts/main.js" data-main="scripts/main"></script>
1. 無返回值的模組呼叫
//module.js
console.log(`這是一個模組。`);
//main.js
require([`scripts/module`]); // 請求的模組路徑用陣列表示
2. 有返回值的模組呼叫
//module.js
function foo(){
console.log(`這是一個模組。`);
}
define(function(){
return {
foo: foo
}
});
//main.js
require([`scripts/module`],function(module){
module.foo();
});
三、CMD規範
關鍵詞: use,define,require,exports,module
CMD規範結合了以上兩種規範的特點,既可以同步呼叫,也可以非同步呼叫,在語法上也非常相似。
目前使用該規範的典型代表有:sea.js。
下面就以sea.js為例,簡單講講CMD規範下的模組化程式設計。
<!--HTML-->
<script src="scripts/sea.js"></script>
<!--引入主模組,模組根目錄為sea.js所在目錄,有點類似於C語言中的main函式-->
<script type="text/javascript">
seajs.use(`main`);
</script>
1. 無返回值的模組呼叫
//module.js
console.log(`這是一個模組。`);
//main.js
define(function(require,exports,module){
require(`module`);
});
這裡需要重點說明一下,define()中回撥函式中所傳引數名稱不允許修改。
2. 有返回值的模組呼叫
定義模組:
//module.js
function foo(){
console.log(`這是一個模組。`);
}
define(function(require,exports,module){
//也可以直接通過return方式暴露模組介面,這樣就與AMD規範相同
module.exports = {
foo: foo
}
});
呼叫模組存在同步和非同步兩種方式:
① 同步呼叫
//main.js
define(function(require,exports,module){
var module = require(`module`);
module.foo();
});
② 非同步呼叫
//main.js
define(function(require,exports,module){
require.async(`module`,function(module){
module.foo();
});
});
本次有關JavaScript模組化程式設計規範的分享就到這裡,若有不到之處,歡迎指正,謝謝!
相關文章
- JavaScript 模組化程式設計(二):AMD規範JavaScript程式設計
- Javascript模組化程式設計(二):AMD規範JavaScript程式設計
- JavaScript模組化規範JavaScript
- javascript 模組化程式設計JavaScript程式設計
- JavaScript 模組化程式設計 - Module PatternJavaScript程式設計
- 前端模組化規範前端
- JS模組化規範JS
- AMD模組化規範
- JavaScript 模組化程式設計(一):模組的寫法JavaScript程式設計
- 簡述JavaScript模組化程式設計(二)JavaScript程式設計
- JS程式設計規範JS程式設計
- React程式設計規範React程式設計
- java程式設計規範Java程式設計
- 程式設計小記-程式設計規範程式設計
- JavaScript 模組化程式設計簡單介紹JavaScript程式設計
- python程式設計規範Python程式設計
- C#程式設計規範C#程式設計
- JavaScript 模組化程式設計之載入器原理JavaScript程式設計
- Commonjs規範與模組化JS
- Go 語言程式設計規範Go程式設計
- 微信小程式元件設計規範微信小程式元件
- python 的程式設計規範Python程式設計
- iOS 團隊程式設計規範iOS程式設計
- C#程式設計命名規範C#程式設計
- 程式設計命名規範(網文)程式設計
- Javascript模組化程式設計(三):require.js的用法JavaScript程式設計UIJS
- JS模組化程式設計JS程式設計
- 前端規範之javascript規範前端JavaScript
- Web前端進階之JavaScript模組化程式設計知識Web前端JavaScript程式設計
- JavaScript ES 模組:現代化前端程式設計必備技能JavaScript前端程式設計
- 爬蟲逆向基礎,理解 JavaScript 模組化程式設計 webpack爬蟲JavaScript程式設計Web
- CSS命名規範和模組化的思考CSS
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- Airbnb JavaScript程式碼規範(完整)AIJavaScript
- JavaScript寫程式碼要規範JavaScript
- python 程式設計規範有哪些?Python程式設計
- 解讀阿里java程式設計規範阿里Java程式設計
- C語言程式設計基本規範C語言程式設計