Composer 是 Magento 的依赖骨架而非可选插件;跳过它直接修改 vendor 或硬放代码会导致模块不注册、自动加载失败、setup:upgrade 报错。

Composer 不是 Magento 的“可选插件”,而是它的依赖骨架——跳过它直接改 vendor 或硬放 app/code,模块大概率不注册、类自动加载失败、setup:upgrade 报 Module 'Vendor_Module' is not installed。
composer require 安装后模块没出现在 module:status 里
Composer 只负责把代码复制进 vendor/(或按 extra/map 规则放进 app/code/),它不管 Magento 的模块注册逻辑。是否被识别,取决于三个文件是否齐全且合法:
-
registration.php必须存在,且调用ComponentRegistrar::MODULE,返回值不能是空或错类型 -
etc/module.xml中的<module name="Vendor_ModuleName"></module>必须与实际命名空间一致 - 该包在
composer.json中声明"type": "magento2-module",否则setup:upgrade不会扫描它
满足以上条件后,仍需手动启用:bin/magento module:enable Vendor_ModuleName,再运行 bin/magento setup:upgrade。
composer install 报 Package not found 或 Could not load package
这不是包名拼错了,绝大多数情况是 repo.magento.com 认证缺失或失效。Magento 官方模块(如 magento/module-catalog-inventory)和大量第三方扩展都托管在这个私有源上。
- 确认项目根目录有
auth.json,内容格式为:{"http-basic": {"repo.magento.com": {"username": "xxx", "password": "yyy"}}} - 检查
composer.json的repositories是否显式包含:"repo.magento.com": {"type": "composer", "url": "https://repo.magento.com/"} - 别急着
require,先试composer show vendor/package看能否列出版本——能列出来,才说明源和认证都通了
升级或卸载时直接删 vendor/ 或 app/code/ 下的目录
这是最危险的操作之一。Composer 依赖 composer.lock 与磁盘文件的一致性来保证 autoloader 正确生成。手动删目录会破坏这种一致性,导致后续 composer install 拒绝恢复、bin/magento setup:di:compile 找不到类、甚至整个站点白屏。
- 卸载模块:用
composer remove vendor/package,它会自动触发uninstall脚本(如有)并更新 lock 文件 - 升级指定模块:用
composer update vendor/package,而不是update全量,避免意外升级其他依赖 - 若已误删,不要手动补文件——先
git checkout vendor/(如果用了 Git),或composer install --no-plugins强制重装并跳过 Magento 插件干扰
create-project 安装 Magento 2 时卡住或拉到 dev 分支
默认命令 composer create-project magento/project-community-edition 不指定版本,就会匹配最高优先级的包——而 Magento 在 Packagist 上把 dev- 分支设为高权重,极易拉到不稳定开发版,然后因 PHP 版本、依赖冲突或插件重写 composer.json 失败。
- 必须带精确版本号,例如
magento/project-community-edition=2.4.7-p1(注意不是2.4.7) - 必须加
--repository-url=https://repo.magento.com/,否则连基础元数据都取不到 - 加
--no-install跳过自动安装阶段,进目录后再跑composer install --no-plugins,绕过magento/composer-root-update-plugin的自动修改行为
真正容易被忽略的是:安装完不能立刻 setup:install,得先确认 vendor/autoload.php 可加载、bin/magento 有执行权限、app/etc/env.php 尚未生成(生成了说明流程被插件劫持了)。


















