摘要:前端項目如何管理前端項目的管理分為兩個維度項目內(nèi)的管理與多項目之間的管理。具體可以參考項目如何進行多人協(xié)作開發(fā)。組件項目更不用說了,值得提一下的是組件項目的版本號應當符合語義化版本規(guī)范。
前端項目如何管理
前端項目的管理分為兩個維度:項目內(nèi)的管理與多項目之間的管理。
1. 項目內(nèi)的管理在一個項目內(nèi),當有多個開發(fā)者一起協(xié)作開發(fā)時,或者功能越來越多、項目越來越龐大時,保證項目井然有序的進行是相當重要的。
一般會從下面幾點來考證一個項目是否管理得很好:
可擴展性:能夠很方便、清晰的擴展一個頁面、組件、模塊
組件化:多個頁面之間共用的大塊代碼可以獨立成組件,多個頁面、組件之間共用的小塊代碼可以獨立成公共模塊
可閱讀性:閱讀性良好(包括目錄文件結(jié)構(gòu)、代碼結(jié)構(gòu)),能夠很快捷的找到某個頁面、組件的文件,也能快捷的看出項目有哪些頁面、組件
可移植性:能夠輕松的對項目架構(gòu)進行升級,或移植某些頁面、組件、模塊到其他項目
可重構(gòu)性:對某個頁面、組件、模塊進行重構(gòu)時,能夠保證在重構(gòu)之后功能不會改變、不會產(chǎn)生新 bug
開發(fā)友好:開發(fā)者在開發(fā)某一個功能時,能夠有比較好的體驗(不好的體驗比如:多個文件相隔很遠)
協(xié)作性:多人協(xié)作時,很少產(chǎn)生代碼沖突、文件覆蓋等問題
可交接性:當有人要離開項目時,交接給其他人是很方便的
1.1 可擴展性對于前端項目而言,可擴展性是并不難的,因為很多時候前端的代碼、文件分塊都是按照頁面來的,所以天然就是一塊一塊的。
但這里還是要提一下,因為有些開發(fā)者不喜歡分塊,把應該分塊的東西雜揉在一起,比如:
- src/ - main/ # main 目錄 - css/ # css 集合 - alpha.css - beta.css - ... - js/ # js 集合 - alpha.js - beta.js - ... - alpha.html # alpha 頁面 - beta.html # beta 頁面 - ...
更好的方式:
- src/ - main/ # main 目錄 - alpha/ # alpha 頁面 - index.css # css 入口文件 - index.js # js 入口文件 - index.html # html 入口文件 - ... - beta/ # beta 頁面 - index.css - index.js - index.html - ... - ...
使前端項目具有高可擴展性,一般從目錄文件結(jié)構(gòu)入手,可以參考:目錄結(jié)構(gòu)優(yōu)化。
1.2 組件化這里的組件化是項目內(nèi)的組件化,我們可以把多個頁面之間共用的大塊代碼獨立成組件,多個頁面、組件之間共用的小塊代碼獨立成公共模塊。
這樣做的目的是為了提高代碼的可重用性,避免重復造輪子。另外,也有利于代碼之間的解耦。
比如:
- src/ - data/ # 常量、靜態(tài)數(shù)據(jù)目錄 - data1.js - data2.js - ... - components/ # 組件目錄 - componnet1/ - componnet2/ - ... - utils/ # 工具函數(shù)目錄 - util1.js - util2.js - ... - ...
可以參考:組件化。
1.3 可閱讀性這里的可閱讀性有兩個方面:目錄文件結(jié)構(gòu)、代碼結(jié)構(gòu)。
1.3.1 目錄文件結(jié)構(gòu)目錄文件結(jié)構(gòu)可閱讀性的好與否除了跟開發(fā)者有關系外,跟項目的搭建者也有很大的關系,因為如果搭建者在最初就定義好整個項目的目錄結(jié)構(gòu),對后期的開發(fā)者是一個很好的約束。
可閱讀性比較差的目錄文件結(jié)構(gòu):
- src/ - css/ # css 集合 - main/ # main 目錄 - alpha.css - beta.css - ... - js/ # js 集合 - main/ # main 目錄 - alpha.js - beta.js - ... - html/ # html 集合 - main/ # main 目錄 - alpha.html # alpha 頁面 - beta.html # beta 頁面 - ...
可閱讀性比較好的目錄文件結(jié)構(gòu):
- src/ - main/ # main 目錄 - alpha/ # alpha 頁面 - index.css # css 入口文件 - index.js # js 入口文件 - index.html # html 入口文件 - ... - beta/ # beta 頁面 - index.css - index.js - index.html - ... - ...
關于目錄文件結(jié)構(gòu)的高可讀性,可以參考:目錄結(jié)構(gòu)優(yōu)化。
1.3.2 代碼結(jié)構(gòu)代碼結(jié)構(gòu)的可閱讀性大部分取決于開發(fā)者的水平,但我們可以使用工具幫助開發(fā)者書寫規(guī)范、格式良好的代碼。
主要有下面的工具:
.editorconfig: 統(tǒng)一每個開發(fā)人員的編輯器配置
eslint: 檢查 js 語法(包括 jsx 語法),然后最大程度的矯正不符合規(guī)范的代碼
stylelint: 檢查 css 語法(包括 less, scss 語法),然后最大程度的矯正不符合規(guī)范的代碼
prettier: 代碼格式優(yōu)化
husky + lint-staged: 強制開發(fā)人員對代碼進行檢查、自動矯正與優(yōu)化
上面的具體用法可以參考:
怎樣提升代碼質(zhì)量
搭建自己的前端腳手架
1.4 可移植性可能的情況下,讓項目具有一定的伸縮性,可以在未來輕松的對項目進行架構(gòu)升級。
讓項目能夠輕松的移植某些頁面、組件、模塊到其他項目,需要對整個項目代碼盡量的解耦與模塊化。另外,也與后面會講到的“項目之間的統(tǒng)一性”有關。
1.5 可重構(gòu)性對頁面、組件的重構(gòu)是常有的事,但怎樣保證在重構(gòu)之后功能不會改變、不會產(chǎn)生新 bug,這就得靠測試用例了。
js 模塊:jest / mocha / tape / ava
React 組件:enzyme + jest,另外可以使用 react-testing-library 代替 react-dom/test-utils
Vue 組件:vue-test-utils + jest / mocha / tape / ava
可以參考:
react 前端項目技術(shù)選型、開發(fā)工具、周邊生態(tài)
vue 前端項目技術(shù)選型、開發(fā)工具、周邊生態(tài)
1.6 開發(fā)友好這主要是從目錄結(jié)構(gòu)優(yōu)化著手,比如:
像下面這種目錄結(jié)構(gòu),如果要編輯一個頁面,需要到處找頁面相關的文件,編輯器上就會形成一個很長的目錄樹,一點不友好:
- src/ - css/ # css 集合 - main/ # main 目錄 - alpha.css - beta.css - ... # 中間有 30 個頁面 - js/ # js 集合 - main/ # main 目錄 - alpha.js - beta.js - ... # 中間有 30 個頁面 - html/ # html 集合 - main/ # main 目錄 - alpha.html # alpha 頁面 - beta.html # beta 頁面 - ... # 中間有 30 個頁面
而像下面這種目錄結(jié)構(gòu),所有的文件都在一個目錄下,找文件就很方便,而且很清晰:
- src/ - main/ # main 目錄 - alpha/ # alpha 頁面 - index.css # css 入口文件 - index.js # js 入口文件 - index.html # html 入口文件 - ... - beta/ # beta 頁面 - index.css - index.js - index.html - ... - ...1.7 協(xié)作性
當項目變大、多人協(xié)作時,我們就需要管理好哪些是正在開發(fā)的代碼、哪些是提交測試的代碼、哪些是已經(jīng)上線的代碼、如何避免代碼沖突與線上新代碼被舊代碼覆蓋等等。
具體可以參考:web 項目如何進行 git 多人協(xié)作開發(fā)。
1.8 可交接性當有人要離開項目時,就需要把他負責的代碼交接給別人,但怎么樣才能使交接是輕松愉快的?
那就是文檔,包括注釋文檔、接口文檔等。想想,如果沒有文檔,該怎樣交接呢?
可以參考:api 接口管理工具。
2. 多項目之間的管理多個項目之間,如何管理好項目之間聯(lián)系,比如共用組件、公共模塊等,保證快捷高效開發(fā)、不重復造輪子,也是很重要的。
一般會從下面幾點來考證多個項目之間是否管理得很好:
組件化:多個項目共用的代碼應當獨立出來,成為一個多帶帶的組件項目
版本化:組件項目與應用項目都應當版本化管理,特別是組件項目的版本應當符合 semver 語義化版本規(guī)范
統(tǒng)一性:多個項目之間應當使用相同的技術(shù)選型、UI 框架、腳手架、開發(fā)工具、構(gòu)建工具、測試庫、目錄規(guī)范、代碼規(guī)范等,相同功能應指定使用固定某一個庫
文檔化:組件項目一定需要相關的文檔,應用項目在必要的時候也要形成相應的文檔
2.1 組件化這里的組件化是項目之間的組件化,我們可以把多個項目共用的代碼獨立出來,成為一個多帶帶的組件項目。
這樣做的目的也是為了提高代碼的可重用性,避免重復造輪子。另外,也便于版本化管理組件。
- project1/ # 項目一 - package.json - src/ - ... - project2/ # 項目二 - package.json - src/ - ... - component1/ # 組件一 - package.json - src/ - dist/ - ... - component2/ # 組件二 - package.json - src/ - dist/ - ...
在 project1 中使用 component1、component2:
# package.json { "dependencies": { "component1": "^0.0.1", "component2": "^0.0.1" } } import component1 from "component1"; import component2 from "component2";
常用組件有:
@yourCompany/utils: 工具類
@yourCompany/shortcut.css: 快捷 css 類
@yourCompany/data: 常用靜態(tài)數(shù)據(jù)
...
組件化一般會與私有 npm 倉庫一起使用。
可以參考:
組件化
私有 npm 倉庫
2.2 版本化如果應用項目使用 npm 來管理依賴,就是版本化管理了。
組件項目更不用說了,值得提一下的是組件項目的版本號應當符合 semver 語義化版本規(guī)范。
版本格式:主版本號.次版本號.修訂號,版本號遞增規(guī)則如下:
主版本號:當你做了不兼容的 API 修改,
次版本號:當你做了向下兼容的功能性新增,
修訂號:當你做了向下兼容的問題修正。
先行版本號及版本編譯元數(shù)據(jù)可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。
可以參考:
從 1 到完美,寫一個 js 庫、node 庫、前端組件庫
從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目
2.3 統(tǒng)一性多個項目之間應當使用相同的技術(shù)選型、UI 框架、腳手架、開發(fā)工具、構(gòu)建工具、測試庫、目錄規(guī)范、代碼規(guī)范等,相同功能應指定使用固定某一個庫。
這樣做的目的是減少項目之間的環(huán)境差異,有利于項目之間的代碼移植,也更有利于組件化、代碼重用。
可以參考:
react 前端項目技術(shù)選型、開發(fā)工具、周邊生態(tài)
vue 前端項目技術(shù)選型、開發(fā)工具、周邊生態(tài)
搭建自己的前端腳手架
通用、封裝、簡化 webpack 配置
2.4 文檔化完善的文檔,不管是對組件項目還是應用項目,都是很重要的。
組件項目需要用文檔告訴開發(fā)者組件怎么用、有哪些接口;應用項目需要用文檔來做小組交流、項目交接等。
后續(xù)更多博客,查看 https://github.com/senntyou/blogs
作者:深予之 (@senntyou)
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101857.html
摘要:延伸閱讀學習與實踐資料索引與前端工程化實踐前端每周清單半年盤點之篇前端每周清單半年盤點之與篇前端每周清單半年盤點之篇 前端每周清單專注前端領域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為新聞熱點、開發(fā)教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡迎關注【前端之巔】微信公眾號(ID:frontshow),及時獲取前端每周清單;本文則是對于半年來發(fā)布的前端每周清單...
摘要:發(fā)布按照官方發(fā)布計劃,的發(fā)布意味著進入階段,徹底退出舞臺,的還有半年結(jié)束。為了應對這個挑戰(zhàn),美團點評境外度假前端研發(fā)團隊自年月起啟動了面向端用戶的赫爾墨斯項目。前端技術(shù)越來越復雜,有不低的技術(shù)門檻。 推薦 1. 利用 Dawn 工程化工具實踐 MobX 數(shù)據(jù)流管理方案 https://zhuanlan.zhihu.com/p/... 項目在最初應用 MobX 時,對較為復雜的多人協(xié)作項...
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
閱讀 2351·2021-11-24 10:27
閱讀 3592·2019-08-30 15:55
閱讀 3355·2019-08-30 15:53
閱讀 2354·2019-08-29 17:27
閱讀 1445·2019-08-26 13:47
閱讀 3558·2019-08-26 10:28
閱讀 926·2019-08-23 15:59
閱讀 2871·2019-08-23 15:19