前端開發中,多個項目使用的公共組件如何存放?

假設我有一個公共的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 前端架構 學習複雜場景數據設計

TAG:前端開發 | 前端工程師 | 模塊化 |