gpt4 book ai didi

php - 开发 Wordpress 插件时的第 3 方依赖冲突

转载 作者:行者123 更新时间:2023-12-01 22:52:14 28 4
gpt4 key购买 nike

我正在开发一个使用 composer.. 的插件,这意味着它在插件文件夹中有一个供应商文件夹,其中包含 Guzzle HTTP 依赖项

在我们安装了这个插件的 wordpress 网站上,有一个现有的插件有 Guzzle HTTP

现在,当我们激活这个插件时,我收到如下错误:

Fatal error: Cannot redeclare GuzzleHttp\uri_template() (previously declared in /nas/content/staging/project/wp-content/plugins/my-plugin/vendor/guzzlehttp/guzzle/src/functions.php:17) in /nas/content/staging/project/wp-content/plugins/other-plugin/includes/lib/aws-sdk/GuzzleHttp/functions.php on line 31

我尝试安装插件加载顺序以强制在“我的插件”之前先加载“其他插件”
目前错误发生在其他插件的资源上​​。
这样,错误将在我们的自动加载中产生,我们可以捕获它。

不幸的是..插件加载顺序不起作用..

任何想法如何解决这个问题?

最佳答案

欢迎来到 WordPress hell 。我们有 2018 年,WordPress 仍然没有任何依赖管理,仍然没有注意到 Composer 的存在。

WordPress 生态系统仅依赖于假设,即插件/主题的函数/类名称应该是唯一的。显然,将流行的第 3 部分 Composer 库与您的插件/主题一起分发是自找麻烦——当其他插件做同样的事情时,很容易发生名称冲突。没有什么好的办法可以摆脱这种局面。

如果你想要一个独立插件的防弹解决方案,你应该在 vendor 目录中为每个包的命名空间加上插件前缀,例如 myplygin\vendor 。然后 GuzzleHttp\Client 变为 myplugin\vendors\GuzzleHttp\Client ,因此不存在名称冲突的风险。这将需要一些工作来为此编写脚本(或者您可以使用一些现有的解决方案,例如 humbug/php-scoper ),并且您可能会得到许多重复的依赖项(10 个插件可能会带来 10 次相同的库,但具有不同的命名空间),但这是将现代工具和模式集成到过时软件中的成本。

如果您正在为自己编写此插件并控制最终安装,则可以尝试 use Composer for installing WordPress and its plugins 。如果 3rd 方插件捆绑了一些 Composer 库,您仍然可能需要修复它们(通过 fork ),但从长远来看,它应该简化很多事情,并且您可以避免为每个插件复制库。

关于php - 开发 Wordpress 插件时的第 3 方依赖冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com