咱們作項目是經常會作一些通用功能的封裝,封裝成一個個的函數,而後保存在一個名叫util.js
的文件中.這種狀況就頗有可能在另外一個開發人員開發時發生命名衝突.javascript
基於util.js
,咱們開始開發UI層通用組件dialog.js
,那麼咱們如今的引用狀況應該這樣:前端
<script src='util.js'></script> <script src='dialog.js'></script>
假若有更多的依賴關係引用起來就很是的繁瑣.java
seajs
是一個模塊管理框架,使用seajs
須要遵照CMD(Common Module Definition)
模塊定義規範.一個文件就是一個模塊.瀏覽器
define
函數進行模塊定義.util.js
文件的代碼以下:服務器
define(function(require,exports){ exports.each = function(){ //實現代碼 }; esxports.log = function(str){ //實現代碼 } });
這裏的exports
向外提供了each
和log
方法,當這個模塊被引用時,能夠調用這兩個方法.框架
require
函數進行模塊調用.dialog.js
文件的代碼以下:異步
define(function(require,exports){ var util = require('./util.js'); exports.init = function(){ util.each(); util.log(); } });
這裏經過require('./util.js')
來調用到util
模塊.模塊化
經過exports
暴露接口.這意味着不須要命名空間,也不須要全局變量,解決了命名衝突的問題.函數
經過require
引入依賴.這是一種很好的關注分離
,解決了繁瑣的文件依賴.工具
模塊的版本管理.經過別名等配置,配合構建工具,能夠比較輕鬆的實現模塊的版本管理.
提高可維護性. 模塊化可讓每一個文件的職責單一,很是利於代碼維護.seajs
提供nocahce
debug
等插件,擁有在線調試等功能,能比較明顯的提高效率.
前端性惡能優化.seajs
經過異步加載模塊對頁面性能很是有益.seajs
提供了combo
flush
插件,配合服務端,能夠很好對頁面性能進行調優.
跨環境共享模塊.CMD
模塊定義規範與NOdejs
的模塊規範很是相近.經過seajs
的Nodejs版本,能夠很方便實現模塊的跨服務器和瀏覽器共享.
前端的模塊化構建可分爲兩大類。一類是以 Dojo
、YUI3
、國內的 KISSY
等類庫爲表明的大教堂模式。在大教堂模式下,全部組件都是顆粒化、模塊化的,各組件之間層層分級、環環相扣。另外一類是以 jQuery
、RequireJS
、國內的 Sea.js
、OzJS
等類庫爲基礎的集市模式。在集市模式下,全部組件彼此獨立、職責單一,各組件經過組合鬆耦合在一塊兒,協同完成開發.
Chorme 3+
Firfox 2+
Safari 3.2+
Opera 10+
IE 5.5+