js的模塊化javascript
在前端開發的原始時期,只要在script標籤中嵌入js代碼就能實現一些基本的交互效果,可是隨着時代的進步。js扮演的角色變得重要起來,js應用的場景頁愈來愈複雜,。然而,js都沒有類的概念,更不用說模塊了。前端
爲何要有模塊化java
當一個項目變得複雜的時候,會出現問題,好比:
命名衝突:開發中重複命名,致使命名衝突。
文件依賴:項目開發中,依賴的js文件,引入遺漏,引入順序錯誤。es6
使用模塊化開發能夠避免相似狀況,並且利於項目的維護:
提高開發效率:代碼方便重用,能直接引入,避免重複開發。
方便後期維護:維護起來文件依賴和結構清晰數組
AMD
AMD 英文Asynchronous Module Definition,中文「異步模塊定義」。它是一個在瀏覽器端模塊化開發的規範。AMD規範的主要實現是RequireJs瀏覽器
define(id?, dependencies?, factory) id:指定義中模塊的名字(可選)。若是沒有提供該參數,模塊的名字應該默認爲模塊加載器請求的指定腳本的名字。若是提供了該參數,模塊名必須是「頂級」的和絕對的(不容許相對名字)。 dependencies:當前模塊依賴的,已被模塊定義的模塊標識的數組字面量(可選)。 factory:一個須要進行實例化的函數或者一個對象。
define("alpha", ["require", "exports", "beta"], function (require, exports, beta) { exports.verb = function() { return beta.verb(); //Or: return require("beta").verb(); } });
CMD
CMD 英文 Common Module Definition。CMD 依賴就近。CMD規範的主要實現是SeaJs服務器
define(function(require, exports, module){ 模塊代碼 });
commonjs
CommonJS是服務器端模塊的規範,Nodejs使用該規範。
CommonJS定義,一個單獨的文件就是一個模塊。每個模塊都是一個單獨的做用域,在該模塊內部定義的變量,沒法被其餘模塊讀取,除非定義爲global對象屬性。
經過 require 來加載模塊。
commonJs經過 exports 和 modul.exports 來暴露模塊中的內容。異步
es6的module 語法
一個模塊就是一個獨立的文件。該文件內部的全部變量,外部沒法獲取。
export 命令用於規定模塊的對外接口。
import 命令用於輸入其餘模塊提供的功能。模塊化
// profile.js export var firstName = 'Michael'; export var lastName = 'Jackson'; export var year = 1958; // main.js import {firstName, lastName, year} from './profile'; function setName(element) { element.textContent = firstName + ' ' + lastName; }