将Craft CMS3的Websitetoolbox插件迁移至Craft CMS4遇Composer报错求助
Craft CMS4适配websitetoolbox插件的Composer版本问题解决
我有一个基于Craft CMS3开发的websitetoolbox插件,想要适配到Craft CMS4环境。直接将插件文件夹复制到Craft CMS4的vendor目录下,并修改了根目录的composer.json文件,内容如下:
{ "require": { "craftcms/cms": "^4.2.0.2", "swishdigital/template-selector": "^1.0", "vlucas/phpdotenv": "^5.4.0", "websitetoolbox/websitetoolboxforum": "1.4.0" }, "require-dev": { "yiisoft/yii2-shell": "^2.0.3" }, "autoload": { "psr-4": { "modules\\": "modules/" } }, "config": { "allow-plugins": { "craftcms/plugin-installer": true, "yiisoft/yii2-composer": true }, "sort-packages": true, "optimize-autoloader": true, "platform": { "php": "8.0.2" } }, "scripts": { "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ] }, "minimum-stability": "dev", "prefer-stable": true }
执行composer update命令时,出现如下错误:
Problem 1
- Root composer.json requires websitetoolbox/websitetoolboxforum 1.4.0, found websitetoolbox/websitetoolboxforum[dev-master, 1.0.0, 1.3.0] but it does not match the constraint.
解决步骤:
停止手动复制插件到vendor的操作
Composer会自动管理依赖包的版本与自动加载配置,手动放入vendor会破坏依赖管理逻辑,引发版本冲突和加载异常。调整版本约束
目前公开Composer仓库中不存在websitetoolbox/websitetoolboxforum 1.4.0版本,可选择以下方案:- 将composer.json中的版本改为仓库已存在的版本,比如:
若需要开发版则改为:"websitetoolbox/websitetoolboxforum": "1.3.0""websitetoolbox/websitetoolboxforum": "dev-master" - 如果1.4.0是你本地修改的版本,需在composer.json中添加本地仓库配置,指向你的插件文件夹:
再将require中的版本改为"repositories": [ { "type": "path", "url": "./path/to/your/websitetoolboxforum-folder" } ]dev-master(或自定义的版本分支/标签),重新执行composer update。
- 将composer.json中的版本改为仓库已存在的版本,比如:
检查插件对Craft CMS4的兼容性
原插件基于Craft CMS3开发,版本问题解决后还需确认代码适配情况:- 核对插件的命名空间、组件调用方式是否符合CMS4规范
- 确认插件依赖的Craft API在CMS4中是否有变更
- 测试插件核心功能是否能正常运行
内容的提问来源于stack exchange,提问作者Kishan Mistry
相关产品推荐
相关产品推荐

