代码之家  ›  专栏  ›  技术社区  ›  xofz

子模块是用于插件还是用于依赖项?

  •  3
  • xofz  · 技术社区  · 15 年前

    假设项目x是基本项目,而项目y依赖于x。项目y可能是项目x的一个插件,或者它可能是一个独立的应用程序,以其他方式需要项目x。

    我一直认为Y项目应该是超级项目,X项目应该是Y项目的子模块。

    但是,在阅读时 this 似乎我的想法是颠倒的。在本文中,依赖项是超级项目,依赖代码(在本例中是插件)是子模块。那么,这是使用子模块的正确方法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    如果Projecty可以在不知道ProjectX的情况下生存(可能是因为它是X的插件),它 不能 做一个超级项目。

    如果它需要x以某种方式完成,那么是的,它可能是一个超级项目,以便在其树中引用x(如中所述 true nature of submodules )

    在一个 component-based approach 一个真正的超级项目是引用正确版本的ProjectY的第三个项目。 ProjectX用于记录整个项目工作所需的准确配置(即修订列表)。


    操作添加了正确的问题:在哪里存储依赖关系(Y对X)?

    如果采用基于组件的方法并且有一个projectz超级项目,并且projecty依赖于要构建的projectx,那么我们是否不将projectx作为子模块包含在projecty的存储库中,而只包含在projectz中?
    这就意味着Projecty不能独立构建,这使得它(由于缺乏口才)成为一种“隐含的子模块”。

    如果您只有两个组件,一个依赖于另一个,那么当然:您可以直接将projectx声明为projecty的子模块。

    但是,如果Projecty不能独立构建,那么它无论如何也不是一个“完整的”(如“自主的”)项目。
    因此,全局父级“projectz”,在projecty之外存储依赖关系信息具有以下优点:

    1. 直接从projectz根目录保持每个模块路径更可见(而不是将projectx潜在地深埋在projecty中,使该依赖项对projecty客户机不那么可见)
    2. 统一ProjectX版本(如果多个模块需要ProjectX,请在ProjectZ中引用一次,清楚地宣传ProjectX的“一个正式版本”,所有其他模块都应使用该版本)
        2
  •  3
  •   mipadi    15 年前

    这要视情况而定,但在一般情况下,我会说子模块对两者都适用(或可以适用)。

    显然,如果项目Y是项目X的依赖项(例如,外部库),那么它应该是子模块。

    但是,子模块不仅用于依赖项,还用于作为半独立开发的项目组件的项。插件就是这样一个组件:它是独立开发的,但是您可能希望用项目的源代码来打包它。