【问题标题】:Is this considered a misuse of composer?这是否被认为是对作曲家的滥用?
【发布时间】:2014-04-16 04:17:58
【问题描述】:

给定项目根目录下的以下目录:

  • app/,静态资源和类映射项目代码的组合
  • src/,配置为加载命名空间的 PHP 代码
  • vendor/,由 composer.json 管理的包

不管我碰巧使用的是什么框架,将src 目录用于旨在在项目之外使用的可移植代码是否正确,或者这是vendor 目录的作用?

src 目录用于要共享的代码是否可能会出现任何问题?

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    这似乎是一种合理的设计方法。 Composer 允许您通过将自己的类自动加载到目录中然后在 composer.json 中引用它来做到这一点。请参阅此问题了解如何:Using Composer's Autoload

    但是,这不会处理 src/ 下代码的版本控制。如果您要单独发布此内容,可能值得学习how to make your library installable through Composer,一旦您将其签入某个地方的 Git 存储库,请像这样引用它:

    "require": {
        "me/testlib": "1.0.*"
    }
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/username/hello-world"
        }
    ]
    

    当然,那么您将维护多个源代码树,一个用于您的项目,一个用于每个库,但这是件好事,对吧? (“关注点分离”。)

    【讨论】:

    • 因此,虽然目录结构本身很好,但您不建议将旨在可移植的代码放在 vendors 之外?
    • vendors/ 是 composer 安装东西的地方。不要把你自己的东西放在那里,除非你按照我的建议通过作曲家从回购中得到它。而且我不确定我是否理解您的问题,但我认为一个合适的答案是“我建议不要将您自己的库与您的程序放在同一个源代码树中”。
    • 是的,我所说的“将代码放入供应商”的意思是“编写包”的同义词。而且您建议src/ 目录仍然是项目级别并且特定于整个解决方案:开发人员不打算在项目之间手动复制整个目录以进行代码重用,而应该只是为 @ 制作一个包987654327@?
    【解决方案2】:

    在一般情况下,您的方法看起来是有效的。

    但是,如果app 或其他任何地方的数据量超过src 中的可用代码量,它将变得无效。换句话说:如果您只在 src 中托管大约一个共享课程,并且在 app 中托管该课程不需要的 1 GB 资产,那么将其设为库将是愚蠢的。

    但是在这种情况下,很容易将该类单独移动到作曲家库中并再次包含它。由于自动加载,该类仍然存在(尽管文件更改了它的位置)并且可以在其他代码中使用。即使该类被移动,任何其他需要全部资产的软件都将继续工作。

    将代码移入库时,可能值得考虑的是,通常越小越好,但太小则毫无价值。你不想require 一个单独的类 - 但是具有相同主题的合理的类集合是一个很好的候选人。

    【讨论】:

    • 而且 src/ 目录显然不是放置跨页面使用的代码的正确位置,对吗?
    • 你可以把代码放在你喜欢的地方,事实上src是很多库的共同选择,tests就在它旁边。我不明白为什么这会很糟糕 - 我自己也在使用它。
    • 这似乎是一种误用,因为 composer 将 vendor/ 指定为管理外部依赖项的目录。任何其他目录都应该是项目特定的。
    • vendor 是 Composer 放置 other 代码的地方,而不是你的。 src 是您可以放置​​您的 代码并通过定义composer.json 文件以允许自动加载并包含该代码来使其可供他人使用的地方。因此,如果您询问的项目在其他地方被使用,只有这样代码才会与您的项目依赖项一起位于 vendor 文件夹中(现在将在您自己的 vendor 文件夹中)。
    • 而我的意思是,如果你有一个项目有一些你想分享的代码,并且其中的无用数据量很少,那么你已经拥有您想包含在其他地方的项目 - 只需通过 Composer 使其可包含。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多