百科问答小站 logo
百科问答小站 font logo



github有没有办法前后端分两个项目,前端代码软连接到后端文件夹中? 第1页

  

user avatar   catchen 网友的相关建议: 
      

可以,请查看 git submodule 命令的帮助或教学,了解一下就能用了。但如果你同时控制两边的代码,强烈不建议使用 git submodule,因为后继问题非常坑,建议从一开始就做成 monorepo。

给你一个非常具体的例子,我的个人网站的源代码使用 submodule 连接 Bootstrap。

你可以看到我有一个叫做 bootstrap 的「目录」,在本地使用时真的如同一个目录一样,但本质上它只是一个指针,它指向另外一个 repo 并指定特定的 commit。

我这样做是因为没有选择,我不控制 Bootstrap 的 repo,但是我要直接引用 Bootstrap 编译之前的 scss 文件,在它上面叠加我的 scss,再一起编译输出我需要的 css。我不能直接使用 Bootstrap 编译输出的 css。

使用 submodule 最坑人的地方是依赖管理。之所以使用 submodule,肯定是两个 repo 存在依赖关系,甚至是多个 repo 之间存在复杂的依赖关系。使用 submodule 时,所有这些依赖都无法获得自动升级,因为指针指向哪个 commit 必须手动管理。

例如说,A 依赖于 B,用 submodule 指向 B 的一个具体 commit。有一天 A 的一名开发者想要用 B 的新功能,发现当前指向的 commit 没有,决定自行升级。他把 submodule 指向了 B 的 master,接着编译不过,因为 B 也在开发中,master 是坏的。他把 submodule 指向 B 最后一个发布版本的 tag,结果发现跟 A 不兼容。于是他开始摸索 B 到底哪个 commit 能给 A 用同时还有新功能,很可能不存在这样一个 commit。

事情发展到这一步,这名开发者觉得还不如把 B 发布到语言对应的包管理平台(例如 Node 对应 NPM),那 A 直接把 B 发布的稳定版本引用过来就可以了,而且还能用 SemVer 或其它方法限定 A 接受的 B 版本范围。这时候 submodule 就可以删掉了。(如果你要做一套基于 submodule 的依赖管理系统,那你就在发明一个新的包管理平台。)

然而这名开发者仍然很不爽。怎么你们维护 B 的团队做着做着就搞到跟 A 不兼容了吗?B 团队说,我们也不知道你们 A 团队在用啊,我们的测试一直能通过,你们的测试也一直能通过(因为没尝试升级 B 的版本),谁知道呢?这个问题的解决办法就是 monorepo。

当 A 和 B 都在一个 repo 里,B 团队开发时如果最新版本跟 A 不兼容,那 CI/CD 能直接通过编译和测试发现这个问题,然后阻止这个 commit 进入 master。在大公司里面,往往不止 A 和 B,还有数量众多的其它依赖关系,这是保证它们更新时保持互相兼容的方法。




  

相关话题

  前端现在怎么这么多人? 
  第三届 Gopher China 大会值得参加吗? 
  网上都说操作真实 DOM 慢,但测试结果却比 React 更快,为什么? 
  为什么知乎前端圈普遍认为H5游戏和H5展示的JSer(负责前端界面工作的程序员)不属于前端工程师呢? 
  纯CSS3有什么实现垂直居中的新方法吗? 
  你们周围有在 GitHub 、博客上很活跃,但工作收入并不是很好的码农吗? 
  React.js有哪些设计缺陷? 
  为什么在 macOS 下 Chrome 的流畅度比 Safari 差很多? 
  如何使用 GitHub? 
  新程序员如何向英文社区(如github)进阶? 

前一个讨论
中国人参加美国大学的兄弟会(或姐妹会)是怎样一种体验?
下一个讨论
说脏话是不是一种双商偏低的行为?





© 2025-02-20 - tinynew.org. All Rights Reserved.
© 2025-02-20 - tinynew.org. 保留所有权利