到底是什麼是前端工程化、模塊化、組件化

来源:http://www.cnblogs.com/allenlei/archive/2016/12/18/6195235.html
-Advertisement-
Play Games

引言 提到前端往往很多人的映像就是入門簡單,HTML、CSS加一起一個星期基本上就能大概上手,JS難一點但也能很快寫一些簡單的小效果,在網上隨便一搜索各種特效代碼隨意用,一個新手前端也能在很短的時間里寫出炫酷的頁面效果,然而入門簡單並不意味著前端這碗飯很好吃,做慣了切圖、佈局、扣特效的前端新同學在向 ...


引言

提到前端往往很多人的映像就是入門簡單,HTML、CSS加一起一個星期基本上就能大概上手,JS難一點但也能很快寫一些簡單的小效果,在網上隨便一搜索各種特效代碼隨意用,一個新手前端也能在很短的時間里寫出炫酷的頁面效果,然而入門簡單並不意味著前端這碗飯很好吃,做慣了切圖、佈局、扣特效的前端新同學在向前發展的路上越來越覺得吃力,而沒有任何編程思想和軟體開發基礎很多人對前端工程化、組件化、模塊化、MVC這些“高大上”的辭彙雲里霧裡。
本文用最簡單的語言介紹一下我對工程化、組件化、模塊化的理解,面向的對象是前端新手,所以我用最好理解的方式去說,難免會有很多“幼稚”的表述,請大神們輕噴。

本文重點介紹思想不涉及過多直接的技術,如果新手同學們理解了思想以後可以多多百度、谷歌去學習具體的技術,我也會在後續的文章中做一些介紹和大家一起學習。

前端工程化

還記得我在最早期寫前端代碼時,往往一個頁面就是一個文件搞定,HTML/CSS/JS全部寫在一起,後來知道應該把結構、樣式和動作分離,我想這是我接觸到最早的前端工程化的思想了,所謂前端工程化我認為就是

將前端項目當成一項系統工程進行分析、組織和構建從而達到項目結構清晰、分工明確、團隊配合默契、開發效率提高的目的.

工程化是一種思想而不是某種技術(當然為了實現工程化我們會用一些技術),這樣說還不夠具體,舉個例子來說:

要蓋一棟大樓,假如我們不進行工程化的考量那就是一上來掂起瓦刀、磚塊就開乾,直到把大樓壘起來,這樣做往往意味著中間會出現錯誤,要推倒重來或是蓋好以後結構有問題但又不知道出現在哪誰的責任甚至會在某一天轟然倒塌,那我們如果用工程化的思想去做,就會先畫圖紙、確定結構、確定用料和預算以及工期,另外需要用到什麼工種多少人等等,我們會先打地基再建框架再填充牆體這樣最後建立起來的高樓才是穩固的合規的,什麼地方出了問題我們也能找到源頭和負責人。

前面我說接觸最早的工程化思維就是“結構、樣式和動作分離”,在只有若幹個頁面的小型項目我們只需要用這些簡單的做法就能把項目很好的組織起來,但是在一個大型web項目中往往有更加複雜的結構和非常多的頁面需要很多人甚至是多個團隊配合才能把項目做完,我們需要有更加嚴謹和複雜的工程化思維去組織結構。從更高層面的項目組織來看我們要做項目的各種規範、技術選型、項目構建優化等等,在代碼層面我們還需要用到JS/CSS模塊機、UI組件化等開發方式。

再用一句通俗的話來概括前端工程化:前端工程化就是用做工程的思維看待和開發自己的項目,而不再是直接擼起袖子一個頁面一個頁面開寫

前端模塊化

前面我們提到在組織代碼的時候會用到模塊化和組件化,大家應該理解到,前端工程化是一個高層次的思想,而模塊化和組件化是為工程化思想下相對較具體的開發方式,因此可以簡單的認為模塊化和組件化是工程化的表現形式。

那具體什麼是模塊化呢,還是舉簡單的例子,我們要寫一個實現A功能的JS代碼,這個功能在項目其他位置也需要用到,那麼我們就可以把這個功能看成一個模塊採用一定的方式進行模塊化編寫,既能實現復用還可以分而治之,同理在寫樣式的時候,如果我們需要某種特殊的樣式,會在很多地方應用,那麼我們也可以採用一定的方式進行CSS的模塊化,具體說來,JS模塊化方案很多有AMD/CommonJS/UMD/ES6 Module等,CSS模塊化開發大多是在less、sass、stylus等預處理器的import/mixin特性支持下實現的,具體技術大家自行學習。

總體而言,模塊化不難理解,重點是要學習相關的技術並且靈活運用。

前端組件化

前文中我們提到過,組件化也是工程化的表現形式,那麼到底什麼是前端組件化呢

頁面上的每個獨立的、可視/可交互區域視為一個組件;
每個組件對應一個工程目錄,組件所需的各種資源都在這個目錄下就近維護;
由於組件具有獨立性,因此組件與組件之間可以 自由組合;
頁面只不過是組件的容器,負責組合組件形成功能完整的界面;
當不需要某個組件,或者想要替換組件時,可以整個目錄刪除/替換。

組件化將頁面視為一個容器,頁面上各個獨立部分例如:頭部、導航、焦點圖、側邊欄、底部等視為獨立組件,不同的頁面根據內容的需要,去盛放相關組件即可組成完整的頁面。

PS:模塊化和組件化一個最直接的好處就是復用,同時我們也應該有一個理念,模塊化和組件化除了復用之外還有就是分治,我們能夠在不影響其他代碼的情況下按需修改某一獨立的模塊或是組件,因此很多地方我們及時沒有很強烈的復用需要也可以根據分治需求進行模塊化或組件化開發。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、插入換行 ~:表示同輩元素之後指定類型的元素,如;elm1 ~ elm2表示,elm1之後的所有elm2元素,且elm1與elm2都是在同一個父級元素。 +:表示同輩元素的兄弟元素。 \A:一個空白換行符 解決方案: 在dd與dt相鄰的dt上的子元素前面加入一個空白換行符 在相鄰的dd與dd之間 ...
  • 環境:win7 64位 IE9 錯誤:SCRIPT5011:不能執行已釋放Script的代碼。 現象:在父窗體的close()中調用嵌套的iframe頁面的js方法返回一個對象時拋此異常。 原因:在一個iframe中定義對象,在這個iframe被刪除後,方法執行的環境丟失,就會報這個錯誤 我的解決辦 ...
  • 通過簡單的示例代碼,短暫地回顧了jQuery的Deferred使用後,我們一起來看看jQuery是怎麼實現Deferred,當然解讀jQuery源代碼的版本是大於1.8的。 ...
  • 本文記錄了我在項目中用過的一些JavaScript小功能,有需要的可以參考下;如有不足之處,還望眾位同行指正。 ...
  • 一、什麼是Vue? Vue.js(讀音 /vjuː/, 類似於 view) 是一套構建用戶界面的 漸進式框架。與其他重量級框架不同的是,Vue 採用自底向上增量開發的設計。Vue 的核心庫只關註視圖層,並且非常容易學習,非常容易與其它庫或已有項目整合。另一方面,Vue 完全有能力驅動採用單文件組件和 ...
  • 項目中ajax交互成功前總會需要給用戶提醒,比如請稍候、正在載入中等等,那個等待的動圖以前項目中用的是gif,在移動端畫質很渣,有毛邊,於是在新項目中用css3展示載入中的動畫效果。 js放在項目公用里,樣式放到公用樣式里,調用的時候tipLoading(type,top,left),在ajax交互 ...
  • 下載 "mysql 5.7.msi" 安裝 雙擊mysql.msi,按照提示安裝。 安裝之後需要註意的問題( 重點 ) 設置mysql環境環境變數(讓mysql在cmd中的任何路徑下就可以被調用) 1. 滑鼠右擊電腦,點擊屬性 2. 選擇高級系統變數設置,點擊環境變數 3. 在系統變數裡面選擇PA ...
  • 1、先引入jquery.js 2、接著引入luhmCheck.js //銀行卡號Luhm校驗 3、看下麵的案例: 下麵是js 測試卡號: 1、6222600810010710887 2、6225881414207430 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...