前端開發中,多個項目使用的公共組件如何存放?
假設我有一個公共的popup組件,A項目和B項目中都會使用到,但是這2個項目,分別放在不同的git倉庫里,如果用最原始的做法,就是人肉拷貝popup組件的代碼到需要使用的項目工程中,非常麻煩,而且不方便維護。
目前,我知道的解決方案有2種:1. 公司內部搭建一個組件源服務,把所有公共組件都放在組件源伺服器上,哪個項目要用,只要在項目的配置文件里添加依賴的組件,再install以下就可以了(類似於npm的包管理機制)。2. 使用git的子模塊。把common層抽出來,單獨存放在一個git庫,作為其他項目的submodule使用。
我想知道,還有其他的解決方案嗎??
1. git submodule 或 git subtree 。前者適合獨立性很高或已經很穩定的組件。但若組件還不完善,常需要在主項目中同時開發,建議考慮 git subtree。
2. 用 npm 或 bower 或類似的 package 管理工具,一般人不建議自己搭建類似方案。當然也許你需要建 private registry,不過我個人認為大多數情況下,你做的 package 不會涉及商業機密或企業核心利益,所以放在 public registry 也無妨。只要注意不要把密鑰之類的東西放進去。
3. 前兩者也可結合使用。比如主項目用npm,並將node_modules checkin到git源碼,node_modules下用symbol link連接到組件的目錄,然後組件目錄用git subtree來管理。
我們現在用的方案是 npm,大部分的模塊放 public registry,個別幾個放私有的 git 倉庫里。npm 可以支持 git 倉庫作為模塊地址,很方便。
git submodule 是個通用的模組管理方案,npm 是對 node 的特有管理方案。所以對於 node 項目來說,npm 的功能要比 git 強不少。
私有 NPM 有一些社區的解決方案,比如 cnpm,kappa 等等,這些方案都是在本地和中央倉庫之間做了一個中間層,以支持私有倉庫。對於小團隊來說,運維成本是最大的問題。npm 中央倉庫在國內不是很穩定,之前用 npm-proxy 的時候就經常遇到各種牆的問題。
P.S: 前端大部分的模塊其實都不會涉及企業核心利益,個別幾個模組沒放 public registry 最大的考慮是代碼通用性不強,文檔不完善,丟出去萬一被人看到了會被吐槽的 -_-git我用git submodule,svn我用externals
svn externals也是一種方案,公共組件放到一個公共倉庫里,各個業務通過svn externals引入
推薦閱讀:
※Airbnb CSS / Sass 指南
※名人堂 | W3CPlus中國創始人大漠:前端路上的旅行
※CSS布局十八般武藝都在這裡了
※經驗 | 張鑫旭對知乎前端相關問題的十問十答
※了解 Twitter 前端架構 學習複雜場景數據設計