前端开发中,多个项目使用的公共组件如何存放?

假设我有一个公共的popup组件,A项目和B项目中都会使用到,但是这2个项目,分别放在不同的git仓库里,如果用最原始的做法,就是人肉拷贝popup组件的代码到需要使用的项目工程中,非常麻烦,而且不方便维护。 目前,我知道的解决方案有2种: 1. 公司内部搭建一个组件源服务,把所有公共组件都放在组件源服务器上,哪个项目要用,只要在项目的配置文件里添加依赖的组件,再install以下就可以了(类似于npm的包管理机制)。 2. 使用…
关注者
132
被浏览
4136

4 个回答

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 最大的考虑是代码通用性不强,文档不完善,丢出去万一被人看到了会被吐槽的 -_-