精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端模塊化開發的價值

開發 前端
隨著互聯網的飛速發展,前端開發越來越復雜。本文將從實際項目中遇到的問題出發,講述模塊化能解決哪些問題,以及如何使用 SeaJS 進行前端的模塊化開發。

前端模塊化開發的價值

隨著互聯網的飛速發展,前端開發越來越復雜。本文將從實際項目中遇到的問題出發,講述模塊化能解決哪些問題,以及如何使用 SeaJS 進行前端的模塊化開發。

惱人的命名沖突

我們從一個簡單的習慣出發。我做項目時,常常會將一些通用的、底層的功能抽象出來,獨立成一個個函數,比如

  1. function each(arr) {  
  2.   // 實現代碼  
  3. }  
  4. function log(str) {  
  5.   // 實現代碼  

并像模像樣地把這些函數統一放在 util.js 里。需要用到時,引入該文件就行。這一切工作得很好,同事也很感激我提供了這么便利的工具包。

直到團隊越來越大,開始有人抱怨。

小楊:我想定義一個 each 方法遍歷對象,但頁頭的 util.js 里已經定義了一個,我的只能叫 eachObject 了,好無奈。

小高:我自定義了一個 log 方法,為什么小明寫的代碼就出問題了呢?誰來幫幫我。

抱怨越來越多。團隊經過一番激烈的討論,決定參照 Java 的方式,引入命名空間來解決。于是 util.js 里的代碼變成了

  1. var org = {};  
  2. org.CoolSite = {};  
  3. org.CoolSite.Utils = {};  
  4.  
  5. org.CoolSite.Utils.each = function (arr) {  
  6.   // 實現代碼  
  7. };  
  8.  
  9. org.CoolSite.Utils.log = function (str) {  
  10.   // 實現代碼  
  11. };  

不要認為上面的代碼是為了寫這篇文章而故意捏造的。將命名空間的概念在前端中發揚光大,首推 Yahoo! 的 YUI2 項目。下面是一段真實代碼,來自 Yahoo! 的一個開源項目。

  1. if (org.cometd.Utils.isString(response)) {  
  2.   return org.cometd.JSON.fromJSON(response);  
  3. }  
  4. if (org.cometd.Utils.isArray(response)) {  
  5.   return response;  
  6. }  

通過命名空間,的確能極大緩解沖突。但每每看到上面的代碼,都忍不住充滿同情。為了調用一個簡單的方法,需要記住如此長的命名空間,這增加了記憶負擔,同時剝奪了不少編碼的樂趣。

作為前端業界的標桿,YUI 團隊下定決心解決這一問題。在 YUI3 項目中,引入了一種新的命名空間機制。

  1. YUI().use('node'function (Y) {  
  2.   // Node 模塊已加載好  
  3.   // 下面可以通過 Y 來調用  
  4.   var foo = Y.one('#foo');  
  5. });  

YUI3 通過沙箱機制,很好的解決了命名空間過長的問題。然而,也帶來了新問題。

  1. YUI().use('a''b'function (Y) {  
  2.   Y.foo();  
  3.   // foo 方法究竟是模塊 a 還是 b 提供的?  
  4.   // 如果模塊 a 和 b 都提供 foo 方法,如何避免沖突?  
  5. });  

看似簡單的命名沖突,實際解決起來并不簡單。如何更優雅地解決?我們按下暫且不表,先來看另一個常見問題。

煩瑣的文件依賴

繼續上面的故事?;?util.js,我開始開發 UI 層通用組件,這樣項目組同事就不用重復造輪子了。

其中有一個最被大家喜歡的組件是 dialog.js,使用方式很簡單。

  1. <script src="util.js"></script>  
  2. <script src="dialog.js"></script>  
  3. <script>  
  4.   org.CoolSite.Dialog.init({ /* 傳入配置 */ });  
  5. </script>  

可是無論我怎么寫文檔,以及多么鄭重地發郵件宣告,時不時總會有同事來詢問為什么 dialog.js 有問題。通過一番排查,發現導致錯誤的原因經常是

  1. <script src="dialog.js"></script>  
  2. <script>  
  3.   org.CoolSite.Dialog.init({ /* 傳入配置 */ });  
  4. </script>  

在 dialog.js 前沒有引入 util.js,因此 dialog.js 無法正常工作。同樣不要以為我上面的故事是虛構的,在我待過的公司里,至今依舊有類似的腳本報錯,特別是在各種快速制作的營銷頁面中。

上面的文件依賴還在可控范圍內。當項目越來越復雜,眾多文件之間的依賴經常會讓人抓狂。下面這些問題,我相信每天都在真實地發生著。

1.通用組更新了前端基礎類庫,卻很難推動全站升級。

2.業務組想用某個新的通用組件,但發現無法簡單通過幾行代碼搞定。

3.一個老產品要上新功能,最后評估只能基于老的類庫繼續開發。

4.公司整合業務,某兩個產品線要合并。結果發現前端代碼沖突。

5.……

以上很多問題都是因為文件依賴沒有很好的管理起來。在前端頁面里,大部分腳本的依賴目前依舊是通過人肉的方式保證。當團隊比較小時,這不會有什么問題。當團隊越來越大,公司業務越來越復雜后,依賴問題如果不解決,就會成為大問題。

文件的依賴,目前在絕大部分類庫框架里,比如國外的 YUI3 框架、國內的 KISSY 等類庫,目前是通過配置的方式來解決。

  1. YUI.add('my-module'function (Y) {  
  2.   // ...  
  3. }, '0.0.1', {  
  4.     requires: ['node''event']  
  5. });  

上面的代碼,通過 requires 等方式來指定當前模塊的依賴。這很大程度上可以解決依賴問題,但不夠優雅。當模塊很多,依賴很復雜時,煩瑣的配置會帶來不少隱患。

命名沖突和文件依賴,是前端開發過程中的兩個經典問題。下來我們看如何通過模塊化開發來解決。為了方便描述,我們使用 SeaJS 來作為模塊化開發框架。

使用 SeaJS 來解決

SeaJS 是一個成熟的開源項目,核心目標是給前端開發提供簡單、極致的模塊化開發體驗。這里不多做介紹,有興趣的可以訪問 seajs.org 查看官方文檔。

使用 SeaJS,在書寫文件時,需要遵守 CMD (Common Module Definition)模塊定義規范。一個文件就是一個模塊。前面例子中的 util.js 變成

  1. define(function(require, exports) {  
  2.   exports.each = function (arr) {  
  3.     // 實現代碼  
  4.   };  
  5.  
  6.   exports.log = function (str) {  
  7.     // 實現代碼  
  8.   };  
  9. });  

通過 exports 就可以向外提供接口。這樣,dialog.js 的代碼變成

  1. define(function(require, exports) {  
  2.   var util = require('./util.js');  
  3.  
  4.   exports.init = function() {  
  5.     // 實現代碼  
  6.   };  
  7. });  

關鍵部分到了!我們通過 require('./util.js') 就可以拿到 util.js 中通過 exports 暴露的接口。這里的 require 可以認為是 SeaJS 給 JavaScript 語言增加的一個 **語法關鍵字*8,通過 require 可以獲取其他模塊提供的接口。

這其實一點也不神奇。作為前端工程師,對 CSS 代碼一定也不陌生。

  1. @import url("base.css");  
  2.  
  3. #id { ... }  
  4. .class { ... }  

SeaJS 增加的 require 語法關鍵字,就如 CSS 文件中的 @import 一樣,給我們的源碼賦予了依賴引入功能。

如果你是后端開發工程師,更不會陌生。Java、Python、C# 等等語言,都有 include、import 等功能。JavaScript 語言本身也有類似功能,但目前還處于草案階段,需要等到 ES6 標準得到主流瀏覽器支持后才能使用。

這樣,在頁面中使用 dialog.js 將變得非常簡單。

  1. <script src="sea.js"></script>  
  2. <script>  
  3. seajs.use('dialog'function(Dialog) {  
  4.   Dialog.init(/* 傳入配置 */);  
  5. });  
  6. </script>  

首先要在頁面中引入 sea.js 文件,這一般通過頁頭全局把控,也方便更新維護。想在頁面中使用某個組件時,只要通過 seajs.use 方法調用。

好好琢磨以上代碼,我相信你已經看到了 SeaJS 帶來的兩大好處。

1.通過 exports 暴露接口。這意味著不需要命名空間了,更不需要全局變量。這是一種徹底的命名沖突解決方案。

2.通過 require 引入依賴。這可以讓依賴內置,開發者只需關心當前模塊的依賴,其他事情 SeaJS 都會自動處理好。對模塊開發者來說,這是一種很好的 關注度分離,能讓程序員更多地享受編碼的樂趣。

小結

除了解決命名沖突和依賴管理,使用 SeaJS 進行模塊化開發還可以帶來很多好處:

1.模塊的版本管理。通過別名等配置,配合構建工具,可以比較輕松地實現模塊的版本管理。

2.提高可維護性。模塊化可以讓每個文件的職責單一,非常有利于代碼的維護。SeaJS 還提供了 nocache、debug 等插件,擁有在線調試等功能,能比較明顯地提升效率。

3.前端性能優化。SeaJS 通過異步加載模塊,這對頁面性能非常有益。SeaJS 還提供了 combo、flush 等插件,配合服務端,可以很好地對頁面性能進行調優。

4.跨環境共享模塊。CMD 模塊定義規范與 Node.js 的模塊規范非常相近。通過 SeaJS 的 Node.js 版本,可以很方便實現模塊的跨服務器和瀏覽器共享。

模塊化開發并不是新鮮事物,但在 Web 領域,前端開發是新生崗位,一直處于比較原始的刀耕火種時代。直到最近兩三年,隨著 Dojo、YUI3、Node.js 等社區的推廣和流行,前端的模塊化開發理念才逐步深入人心。

前端的模塊化構建可分為兩大類。一類是以 Dojo、YUI3、國內的 KISSY 等類庫為代表的大教堂模式。在大教堂模式下,所有組件都是顆?;?、模塊化的,各組件之間層層分級、環環相扣。另一類是以 jQuery、RequireJS、國內的 SeaJS、OzJS 等類庫為基礎的集市模式。在集市模式下,所有組件彼此獨立、職責單一,各組件通過組合松耦合在一起,協同完成開發。

這兩類模塊化構建方式各有應用場景。從長遠來看,小而美更具備寬容性和競爭力,更能形成有活力的生態圈。

總之,模塊化能給前端開發帶來很多好處。如果你還沒有嘗試,不妨從試用 SeaJS 開始。

原文鏈接:https://github.com/seajs/seajs/issues/547

責任編輯:張偉 來源: github
相關推薦

2017-05-12 14:00:07

大數據前端模塊化開發

2013-03-11 10:10:03

2013-08-20 16:33:52

前端模塊化

2014-04-22 10:19:40

objection模塊化開發iOS

2010-08-02 09:21:48

Flex模塊化

2023-02-15 22:13:19

客戶端Android

2023-11-08 13:55:27

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2022-09-05 09:01:13

前端模塊化

2013-08-20 15:31:18

前端模塊化

2023-10-17 09:19:34

開發Java

2022-03-11 13:01:27

前端模塊

2019-12-02 16:05:10

前端模塊化JavaScript

2023-05-24 10:35:11

Node.jsES模塊

2015-10-10 10:01:28

前端模塊化webpack

2020-11-09 10:46:35

CommonJS

2014-04-27 10:16:31

QCon北京2014Andrew Bett

2016-09-23 11:08:35

前端Javascript模塊化

2013-03-19 10:50:38

點贊
收藏

51CTO技術棧公眾號

91激情视频在线观看| 99999精品视频| 亚洲国产精品久久人人爱潘金莲| 国内精品久久久久久久97牛牛 | 欧美怡春院一区二区三区| 泷泽萝拉在线播放| 亚洲精品毛片| 天天综合网天天综合色| 亚洲精品国产精品国自产| 国产欧美久久久精品免费| 亚洲精品九九| 日韩在线视频免费观看| 50一60岁老妇女毛片| 久久亚洲人体| 欧美日韩国产丝袜另类| 中文字幕欧美日韩一区二区三区| 亚洲 欧美 自拍偷拍| 老司机精品视频一区二区三区| 欧美激情伊人电影| 成人一级片免费看| 九九亚洲视频| 亚洲成人免费网站| 国产永久免费网站| 91av亚洲| 五月婷婷综合激情| 一本二本三本亚洲码| 国产片在线观看| 丁香啪啪综合成人亚洲小说 | 国产精品久久毛片av大全日韩| 高清一区二区三区视频| 91久久国语露脸精品国产高跟| 亚洲综合不卡| 97欧美精品一区二区三区| 亚洲少妇xxx| 欧美偷拍自拍| 亚洲网站在线播放| 日本丰满少妇裸体自慰| 国产精品毛片视频| 日韩欧美一级在线播放| 97超碰成人在线| 51一区二区三区| 色哟哟一区二区三区| 亚洲熟妇av日韩熟妇在线| 青青草原国产在线| 亚洲激情在线激情| 色婷婷777777仙踪林| 毛片在线看网站| 国产精品嫩草影院com| 日韩精品极品视频在线观看免费| 日本国产在线| 久久久久高清精品| 欧美不卡三区| 久久精品国产亚洲a∨麻豆| 99精品久久99久久久久| 九九热久久66| 欧美日韩国产综合视频| 2020国产成人综合网| 精品在线一区| 狠狠狠综合7777久夜色撩人 | 夫妻性生活毛片| 国产精品99久久精品| xxxxx91麻豆| 欧美成人777| 欧美精选一区| 久久免费国产精品1| 日本中文字幕免费| 亚洲一区成人| 国产不卡一区二区在线播放| 姑娘第5集在线观看免费好剧| 免费观看在线色综合| 国产欧美日韩最新| 国产成人精品一区二区无码呦| 丁香婷婷综合激情五月色| 韩日午夜在线资源一区二区| 三级黄视频在线观看| 欧美国产日韩一二三区| 国产又大又长又粗又黄| 欧美日韩经典丝袜| 精品久久久久国产| 中文字幕在线导航| 国产精品一站二站| 337p日本欧洲亚洲大胆精品| 国产夫妻性爱视频| 日韩综合一区| 久久久久久av| 免费无码国产精品| 极品少妇一区二区| 国产精品亚洲综合| 高清性色生活片在线观看| 亚洲视频一区二区在线观看| 日韩av中文字幕第一页| 深夜视频一区二区| 日韩免费视频一区二区| 蜜桃精品成人影片| 日韩在线精品| 91精品国产色综合| 97人人爽人人爽人人爽| 不卡的av中国片| 亚洲精品在线观看免费| bbw在线视频| 精品视频1区2区3区| 亚洲成年人在线观看| 精品国产乱码| 国产+人+亚洲| 国产精品久久久久久久久毛片| av电影在线观看完整版一区二区| 在线观看欧美激情| 女厕盗摄一区二区三区| 在线不卡一区二区| 欧美熟妇激情一区二区三区| 91久久中文| 91久久精品一区二区别| 搞黄视频在线观看| 欧美日韩在线第一页| 色黄视频免费看| 成人综合专区| 欧美一区二区色| 99在线精品视频免费观看20| 国产日韩欧美精品一区| 少妇av一区二区三区无码| 国产麻豆一区二区三区| 国产亚洲人成网站在线观看| 国产精品23p| 国产精品一区二区男女羞羞无遮挡| 欧美aaaaa喷水| 18video性欧美19sex高清| 91精品国产91久久久久久最新毛片| 国产精品高清无码在线观看| 日韩一级大片| 国内精品国语自产拍在线观看| 91小视频xxxx网站在线| 欧美喷水一区二区| 极品人妻videosss人妻| 久久av在线| 久久久久久久有限公司| 超碰在线中文字幕| 日韩一区二区精品在线观看| 三级黄色在线观看| 久久99精品久久久久久国产越南| 日产精品久久久一区二区| 自拍视频在线看| 日韩av在线最新| 六月丁香在线视频| 日本中文字幕免费| 国语对白一区二区| 日韩一区二区在线| 国产99久久精品一区二区 夜夜躁日日躁 | 色综合咪咪久久| 久久人妻少妇嫩草av蜜桃| 伊人久久大香线| 国产欧美一区二区三区在线| 在线免费看av| 欧美精品丝袜久久久中文字幕| 国产精品丝袜久久久久久高清 | 国产精品自产拍高潮在线观看| 色在线免费视频| 日韩欧美精品在线观看| 女人被狂躁c到高潮| 男人的天堂亚洲| 视频一区视频二区视频| 欧美亚洲综合视频| 久久91亚洲人成电影网站| 好吊色在线观看| 欧美日韩精品在线视频| 久久精品国产亚洲av久| 免费看欧美女人艹b| 欧美日韩电影一区| 一个色综合导航| 国产少妇在线观看| 国产伦精品一区二区三区视频青涩 | 国产九一精品| 国产精品看片资源| 日本在线人成| 日韩欧美一级精品久久| 久草视频在线资源站| 波多野结衣视频一区| 国产女女做受ⅹxx高潮| 日韩中文在线电影| 51蜜桃传媒精品一区二区| caoprom在线| 亚洲天堂成人在线视频| 亚洲系列第一页| 亚洲一级二级三级| 久久久久亚洲av无码专区桃色| 日本一不卡视频| 久久久久久久免费视频| 欧美日韩看看2015永久免费| 国产精品看片资源| 国产羞羞视频在线播放| 亚洲欧美综合图区| 国产视频手机在线| 欧美视频在线观看 亚洲欧| 极品尤物一区二区| 成人免费毛片aaaaa**| 日本激情视频在线| 国产精品草草| 欧洲精品久久| 北条麻妃一区二区三区在线观看| 日韩av毛片网| 国产99re66在线视频| 国产一区二区三区高清在线观看| 亚洲AV无码一区二区三区少妇| 色综合欧美在线| 国产成人无码aa精品一区| 久久久午夜精品理论片中文字幕| 午夜免费福利网站| 日韩制服丝袜先锋影音| 无码日本精品xxxxxxxxx| 成人综合一区| 欧美日韩日本网| 国产 日韩 欧美 综合 一区| 成人黄色在线免费| 欧美精品高清| 91极品女神在线| 伊人影院在线视频| 久久九九亚洲综合| 第一视频专区在线| 日韩精品高清在线| 亚洲免费黄色片| 777久久久精品| 在线视频精品免费| 日韩欧美在线播放| 久久精品视频久久| avtt综合网| 色妞一区二区三区| 男人天堂亚洲二区| 欧美精品一区二区三区一线天视频 | 亚洲欧美日韩色| 国产在线国偷精品产拍免费yy| 无码人妻丰满熟妇区毛片| 亚洲第一黄网| 欧美午夜小视频| 国产精品s色| ijzzijzzij亚洲大全| 日韩免费一区| 色狠狠久久av五月综合|| 亚洲三级性片| 蜜桃臀一区二区三区| 日韩丝袜视频| 久久爱av电影| 日本韩国欧美超级黄在线观看| 国产欧美日韩在线播放| 一区二区在线免费播放| 99www免费人成精品| 欧美一区一区| 99精品在线直播| 一区二区日韩| 99久久精品免费看国产一区二区三区| 日韩三级av高清片| 成人女人免费毛片| 粉嫩一区二区三区四区公司1| 国产富婆一区二区三区| 成人18夜夜网深夜福利网| 国产亚洲精品美女久久久m| 日韩有码av| 久久影院理伦片| 加勒比久久综合| 亚洲精品久久久久久一区二区| 日韩综合在线| 日韩一二区视频| 国产欧美日韩亚洲一区二区三区| 日韩欧美视频网站| 日韩激情视频网站| 在线观看免费av网址| 国产精品影视在线| 美女黄色一级视频| 久久久九九九九| 任我爽在线视频| 亚洲在线视频网站| 超碰超碰超碰超碰| 欧美日韩高清影院| 午夜精品一二三区| 精品亚洲一区二区三区在线播放 | 超碰97人人射妻| 日韩不卡在线观看日韩不卡视频| 性猛交ⅹ×××乱大交| 国产一区欧美日韩| 性久久久久久久久久久| 日本一区二区三区在线观看| 黄色香蕉视频在线观看| 香蕉成人啪国产精品视频综合网 | 欧美亚洲国产免费| 色综合狠狠操| 欧美亚洲黄色片| 奇米影视一区二区三区小说| 精品人妻一区二区三| 久久众筹精品私拍模特| 无码人中文字幕| 亚洲电影一级黄| 一区二区视频免费| 精品精品国产高清a毛片牛牛| 美女做暖暖视频免费在线观看全部网址91 | 国产主播喷水一区二区| 国产精品丝袜在线播放| 亚洲国产婷婷香蕉久久久久久99| 欧美阿v一级看视频| 99久久激情视频| 国产成人a级片| 精品熟妇无码av免费久久| 亚洲国产精品久久艾草纯爱 | 高潮一区二区| av一区二区三区在线观看| 欧美一区二区性| 日韩av高清在线看片| 九九视频精品免费| 加勒比一区二区| 亚洲午夜视频在线观看| 中文字幕一区二区三区四区免费看| 亚洲电影免费观看高清| 成人影院在线看| 国产精品免费网站| 日本成人中文| 91九色丨porny丨国产jk| 寂寞少妇一区二区三区| 人妻大战黑人白浆狂泄| 亚洲成av人影院| 成 人 免费 黄 色| 日韩亚洲一区二区| 一区二区精品伦理...| 99re视频在线| 亚洲高清影视| 国产美女18xxxx免费视频| 国产日韩av一区| 精品国产午夜福利| 亚洲国产精品系列| 久久大胆人体| 7777奇米亚洲综合久久| 我不卡神马影院| 欧美美女一级片| 中文字幕av不卡| a片在线免费观看| 夜夜嗨av色一区二区不卡| 深夜av在线| 亚洲成人精品av| 99国精产品一二二线| 伊人亚洲综合网| 欧美日韩综合在线| 久久久久久久影视| 欧美一级在线播放| 丝袜连裤袜欧美激情日韩| 尤物av无码色av无码| 成人动漫在线一区| 久久精品国产亚洲AV无码男同 | 亚洲激情中文在线| 午夜视频在线网站| 国产精品久久三区| 国产美女主播在线观看| 久久深夜福利免费观看| 成人噜噜噜噜| 日本精品福利视频| 国产不卡视频在线播放| 国产午夜福利精品| 精品亚洲永久免费精品 | 91在线观看免费网站| 亚洲国产精品日韩专区av有中文| 国产精品嫩草影视| 夜夜操天天操亚洲| 欧美一区二区三区激情| 欧美自拍视频在线观看| 国内精品伊人久久久| 91高清国产视频| 亚洲精品视频在线观看免费| 精品免费久久久| 久久免费视频这里只有精品| 日韩精品免费一区二区夜夜嗨| 日韩无套无码精品| 国产精品久久久久婷婷二区次| 国产视频手机在线| 午夜伦理精品一区| 精品视频日韩| 中文字幕 欧美日韩| 亚洲图片有声小说| 国产一级片在线播放| 91精品国产综合久久久久久蜜臀| 亚洲小说欧美另类社区| 欧美 日本 国产| 欧美精品乱码久久久久久 | 午夜日韩在线观看| 久久天堂电影| 亚洲精品欧美一区二区三区| 亚洲黄色精品| 激情五月深爱五月| 日韩免费福利电影在线观看| 天堂在线中文网官网| 日韩欧美一区二区视频在线播放 | 久久久久无码精品国产sm果冻| 4hu四虎永久在线影院成人| 国产中文在线播放| 亚洲五月六月| av成人免费在线| 91麻豆国产视频| 9.1国产丝袜在线观看| 国产精品国产一区| 中文精品在线观看| 日韩一区二区免费电影| 88xx成人免费观看视频库| 国产精品va在线观看无码| 国产三级精品三级| 黄色av网址在线| 91久久国产精品91久久性色|