嵌套目录的作曲家供应商名称格式

composer vendor name format for nested directory

composer 包的标准包名格式是 vendor/pkName。 我有以下目录结构:

 - myVendorName

    - extensions
      - yii2
        -Ext1
        -Ext2 and so on

    - bundles
      - bundle1
      - bundle2
      - bundle3 and so on

    - toolkit
     - forlder1
     - folder2 and so on

这是我在硬盘里给的组织,但是真正的项目是这样的:

  - myVendorName/extensions/yii2/ext1
  - myVendorName/extensions/yii2/ext2
  - myVendorName/bundles/bundle1
  - myVendorName/bundles/bundle2
  - myVendorName/bundles/bundle3
  - myVendorName/toolkit

我对此的疑问:

  1. 可以将所有内容存储在一个 git 存储库中,并且只需要 composer 需要的子包(例如:只需要 myVendorName/toolkitmyVendorName/bundles/bundle3

  2. 可以使用 composer 维护扩展名称格式(因此在 composer.json 要求部分,需要 myVendorName/bundles/bundle3 而不是 myVendorName/bundle3

有没有办法达到这两点?

你可以通过使用git子树分裂来实现(1)。使用此方法,您将主存储库的单独目录拆分为一个新存储库并将其推送到 github。这样,所有的包仍然有自己的存储库,但你只需要维护一个存储库(很多大项目都使用它,比如 Symfony,Laravel,等等)。

(2) 不受支持。您可以使用 my_vendor/third-bundle 之类的东西来代替 my_vendor/bundles/third。目录无论如何都不重要,因为 Composer 会完美地自动加载包内的所有 类(如果它们具有正确的自动加载配置)。

It's possible to store all in one git repository and require with composer only the needed subpackages (for example: require only "myVendorName/toolkit" and "myVendorName/bundles/bundle3")

是的。如果您在可能需要特定依赖集的不同项目中有相同的组件,请考虑将它们设为可重用的包,而不是 composer.json 的空包。另请注意 require-dev 正在解析 only in root package.

It's possible to maintain the extended name format with composer (so in composer.json require section, require for "myVendorName/bundles/bundle3" instead of "myVendorName/bundle3"

是的。在 repositories 中,提供 vcspackage 存储库并使其解析 myVendorName/bundles/bundle3vcs 中的 url 可能指的是本地 git 仓库。没有简单的方法可以将 "myVendorName/bundle3" 别名为 "myVendorName/bundles/bundle3",这使得这个想法不切实际。