SeaJS是一個遵循CommonJS規範的JavaScript模塊加載框架,能夠實現JavaScript的模塊化開發及加載機制。前端
SeaJS的主要目的是令JavaScript開發模塊化並能夠輕鬆愉悅進行加載,將前端工程師從繁重的JavaScript文件及對象依賴處理中解放出來,能夠專一於代碼自己的邏輯。jquery
SeaJS的做者是淘寶前端工程師玉伯。git
SeaJS自己遵循KISS(Keep It Simple, Stupid)理念進行開發,其自己僅有個位數的API,所以學習起來毫無壓力。在學習SeaJS的過程當中,到處能感覺到KISS原則的精髓——僅作一件事,作好一件事。github
SeaJS項目目前託管在GitHub上,主頁爲 https://github.com/seajs/seajs/ 。正則表達式
下載完成後,經過<script>
標籤將其引入頁面前端工程師
<script src="../sea.js"></script>
使用SeaJS開發JavaScript的基本原則就是:一切皆爲模塊。引入SeaJS後,編寫JavaScript代碼就變成了編寫一個又一個模塊,SeaJS中模塊的概念有點相似於面向對象中的類——模塊能夠擁有數據和方法,數據和方法能夠定義爲公共或私有,公共數據和方法能夠供別的模塊調用。app
另外,每一個模塊應該都定義在一個單獨js文件中,即一個對應一個模塊。框架
模塊的定義模塊化
defineSeaJS中使用"define"函數定義一個模塊函數
define(function(require, exports, module) {
require("./module1");
exports.add = function(x, y) {
return x + y;
};
});
裏面的這個函數是模塊的主體和重點:
require: 模塊加載函數,用於加載依賴的模塊
exports: 接口對象,將變量或方法定義其上並暴露給外部調用
module: 模塊的元數據
requirerequire是SeaJS主要的模塊加載方法, 當在一個模塊中須要用到其餘模塊時通常用require加載:
var module1 = require("../module1");
加載流程:SeaJS會首先下載入口模塊,而後順着入口模塊使用正則表達式匹配代碼中全部的require,在根據require中的文件路徑標識下載相應的JS文件,對下載來的js文件進行相似操做.傳給require的路徑標識必須是字符串字面量,不能是表達式,以下面使用require的方法是錯誤的:
require("module" + 1);
require("MODULE".toLowerCase());
seajs.configSeaJS提供了一個config方法能夠設置全局配置,接收一個表示全局配置的配置對象:
seajs.config({
base: 'path/to/jslib/',
alias: {
'app': 'path/to/app/'
},
charset: 'utf-8',
timeout: 20000,
debug: false
});
base: 表示基址尋址時的基址路徑
alias: 經常使用路徑設置縮寫
charset: 表示下載js時script標籤的charset屬性
timeout: 表示下載文件的最大時長, 以毫秒爲單位
debug: 表示是否工做在調試模式下
seajs.use該方法主要用於載入入口模塊,入口模塊表示是一個程序的入口
seajs.use("./main", function(main) {
//some code here
})
第一個參數爲須要載入的文件的路徑,能夠不加後綴,默認爲.js文件.第二個參數爲加載成功以後的回調函數.
Seajs如何與現有JS庫配合使用
要將現有JS庫如jQuery與SeaJS一塊兒使用,只需根據SeaJS的的模塊定義規則對現有庫進行一個封裝。例如,下面是對jQuery的封裝方法:
define(function() {
//jquery原有代碼
return $.noConflict();
});
seajs + handlebars
在 seajs 中使用 handlebars, 須要引入 seajs-text.js, 用來載入模板.
使用 seajs 加載 modules/handlebars.seajs.min
模塊中操做:
`