git 子模块 vs npm 包?

Giu*_*age 5 git-submodules

我正在使用 git submodule 在项目之间构建和共享组件。该项目尚未投入生产,因此,此时子模块运行良好。

但我担心维护和部署,将其转换为 npm 包是个好主意吗?

Dev*_*ode 6

npm 包将允许跨不同的包版本进行碎片化。另一方面,git 子模块有一点学习曲线,而且工具真的不是那么好。使用 git 子模块,您可以将所有源代码放在一个文件夹中。

如果这是在所有可能的话,我建议你使用纯monorepo所有项目。您可能需要创建构建时间变量(通过 babel 插件),您可能需要从后端提供某种“实时配置”。我使用 git submodules 工作了一年,最近我使用了一个使用 npm 共享代码的项目。

对于所有共享代码,我建议只使用一个git 子模块,而不是多个子模块。我会强烈考虑使用 lerna,并使用您的一个git 子模块来跟踪 lerna 的packages目录。如果团队决定他们不喜欢 git 子模块,您可以轻松地将此存储库设为兄弟 git 存储库,而不是子模块。但是,最重要的是,我建议使用普通的 monorepo。

这是来自 Netflix 的关于 monorepo 的精彩演讲:https : //www.youtube.com/watch?v= VNqmHJtItCs (强烈关注阻止 npm 风格的包)

这是谷歌臭名昭著的 monorepo 演讲:https : //www.youtube.com/watch?v= W71BTkUbdqE

这是一个很好的网站,可以帮助您思考良好的开发流程:https : //trunkbaseddevelopment.com/(它主要倡导 monorepo 方法)

如果您正在为不同的客户(不同的人/公司为类似的项目付钱给您)开发软件,并且同意它们至少应该有 80% 相同,那么您可能真的很喜欢使用构建标志来帮助开始拆分功能,但我相信你应该非常主动地保持构建标志周围的代码干净,并重构为可重用的组件/包。为每个客户端提供某种 build-flags.json。构建标志应该仅针对功能命名,理论上这些功能都可以单独切换。对于每个项目,有些代码可能是完全自定义的,在这种情况下,您可能需要考虑使用动态导入,但通常这是我尚未完全克服的痛点,尽管我对此有很多未提炼的想法。

如果 monorepo 没有发生,我实际上建议在 git 子模块上使用 npm 包+单独的 repos,假设您可以对包进行良好的语义版本控制。(而且,yalc似乎是将包链接在一起的好工具,而不是标准的npm/yarn link

  • 这是“我们”(许多开发人员,我认为)喜欢问的问题之一,但可能不符合 StackOverflow 的指导方针,答案相当于迷你博客文章或大量评论,但通过在 StackOverflow 上获得权威感SO 的 Q/A 格式。 (2认同)