在WordPress主题或插件中使用Composer时避免依赖冲突
关于使用Composer解决依赖包冲突的问题
我是一个有经验的WordPress开发者,很可能您已经在自己的项目中使用了Composer为我们安装依赖包。Composer使用丰富的PHP开源程序包提供了非常大的便利。在自己的网站上使用Composer,依赖是可控的,遇到极赖冲突的机会比较小。
但是如果您打算把自己开发的主题或插件共享出去供大家使用,使用Composer的时候就要小心了。因为您不知道使用您插件的网站使用了哪些插件,更无法知道这些插件是否使用Composer安装了相同但不兼容的PHP包。哪个先加载,冲突的结果是什么?
尝试解决Composer依赖冲突
有两个Composer工具,Imposter插件目的就是帮助您使用自己的命名空间包装使用Composer安装的依赖包,从而避免依赖冲突。
使用这两个工具都需要在comopser.json中进行一些设置,然后花一些时间测试他们是否能正确处理您的composer依赖。
下面是我在一个插件中使用imposter-plugin处理league/container依赖的示例,注意下面代码中的「extra」部分,这是我们需要添加的配置代码。
{
"name":"wenprise/project-name",
"description":"Demoproject",
"require":{
"php":">=7.1",
"league/container":"^3.3",
"psr/container":"^1.0",
"psr/container-implementation":"^1.0",
"typisttech/imposter-plugin":"^0.6.0"
},
"autoload":{
"psr-4":{
"Wenprise\\ProjectName\\":"src/"
}
},
"extra":{
"imposter":{
"namespace":"Wenprise\\ProjectName\\Vendor",
"excludes":[
"psr/container-implementation"
]
}
}
}
编辑好composer.json后,运行composer update
,然后打开league/container看一下imposter插件为我们做的工作。
<?php
namespace Wenprise\ProjectName;
use Wenprise\ProjectName\Vendor\League\Container\Container as Container;
我们可以发现,命名空间如预期,被添加了「Wenprise\ProjectName」前缀,这样处理后,league/container包就运行在我们自己的命名空间之内了,等于变成了这个插件专属的代码。其他主题或插件使用的是哪个league/container就和我们的插件没关系了。
一些限制和类似工具
截止本文发布之前,Imposter插件的最新版本是0.6.0,离1.0版本的发布还有一段距离。经过我们的测试,使用此插件处理不包含其他依赖的composer包基本都可以正确处理,但是如果需要处理的composer包又依赖了其他的包,使用Imposter处理就有很大的机会遇到错误。建议使用此插件进行插件或主题开发的时候,进行充分的测试。
Mozart和PHP-Scoper是另外两个类似的工具,未发布稳定的1.0版本。有需要的朋友可以同时测试一下,看那个工具最能满足您的需要。

-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
创建Vue组件详细教程 2023-09-10 00:23:17
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02
-
Astra 主题团队推出人工智能驱动的 WordPress 网站创建平台 – ZIPWP 2023-08-28 16:49:54
-
WordPress 宣布将为用户提供 100 年域名托管服务 2023-08-28 16:45:27
-
PHP判断if else 和 switch case的区别盘点 2023-07-29 15:11:11
-
详解WordPress独立站SEM中的OCPC方法(含百度推广OCPC与谷歌OCPC) 2023-07-19 08:01:30
-
WordPress的古腾堡全站编辑器site-editor.php介绍(附:site-editor.php启用代码) 2023-07-16 08:01:57