如何在 Shopware 6 插件 ZIP 中包含重叠的作曲家依赖项?

How to include overlapping composer dependencies in a Shopware 6 plugin ZIP?

将 Shopware 插件作为 ZIP 文件分发时,它必须包含 vendor 目录,但不包含 shopware/coreshopware/administration 等在 [=14= 中定义的依赖项].我上班的那个。

但是如何包含与 shopware/core 依赖项重叠的依赖项,这些依赖项本身具有依赖项?

明确地说,我尝试添加一个依赖于(如 Shopware 本身)psr/cache 的包。 但是当我包含它时,在激活插件时收到以下错误消息:

Fatal error: Cannot declare interface Psr\Cache\CacheItemPoolInterface, because the name is already in use in /var/www/html/vendor/psr/cache/src/CacheItemPoolInterface.php on line 14

是否有解决此类问题的已知工作流程? Shopware 提供的文档没有解释如何解决这些类型的冲突。

如果是你的插件,那么有3个选项。

  1. 需要相同的包
  2. 使用 https://github.com/humbug/php-scoper 之类的工具来解决命名问题。
  3. 通过作曲家安装

如果不是你的,你应该为插件提供商创建一个问题。

如果您为 Shopware 分发插件并使用 Composer 库,您会发现范围和命名空间冲突,例如 Fatal error: Cannot declare interface...。在 WordPressJoomlaPrestaShop 或您不了解的任何其他 CMS 上也发现了同样的问题无法完全控制安装的内容。

如您所述,最初的问题是核心库与您的插件依赖项之间存在冲突。此外,您会发现系统上安装的每个包之间存在问题,这些包使用相同的库或相同库的不同版本将 Composer 包复制到 Shopware。

实际上,唯一真正和最灵活的解决方案是在您捆绑在 ZIP 文件中的 PHP 代码前加上前缀。通过这种方式,您可以完全确定它的工作独立于与它一起安装的内容。

在PHP生态系统中,有一些为命名空间添加前缀和自定义项目范围的解决方案。例如:php-scope、namespacer、mozart 或 PHP-Prefixer.

免责声明:我是领先的 PHP-Prefixer 开发人员。