Composer 是 Drupal 9+ 项目必需的依赖管理器,手动操作 vendor 或模块会导致自动加载失败、升级异常和 CI 不一致;必须通过 composer require 安装扩展,提交 composer.json 和 composer.lock,禁止提交 vendor 目录。

Composer 不是 Drupal 的可选插件,而是现代 Drupal 项目事实上的依赖管理器——跳过它直接改 vendor 或手动下载模块,迟早会遇到 Class not found、drush cr 失败、升级失败或 CI 构建不一致。
为什么不能只用 drush pm:enable 装模块?
因为 drush pm:enable 只处理启用逻辑,不解决依赖树。比如装 devel 模块时,它依赖 symfony/yaml 和 drupal/core-recommended 锁定的特定版本;手动放文件进去,Composer 不知道这些关系,下次 composer update 可能删掉它们,或导致自动加载失效。
常见错误现象:PHP Fatal error: Class 'Drupal\devel\DevelController' not found,但模块明明在 modules/contrib/devel 里——问题出在 autoload 没注册,而这是 Composer 在 vendor/autoload.php 里统一维护的。
- 所有 Drupal 9+ 官方发行版(包括
drupal/recommended-project)默认要求通过 Composer 安装扩展 -
drush和drupal/console自身也是 Composer 包,混用全局安装和项目本地安装容易冲突 - 生产环境部署必须基于
composer install --no-dev --optimize-autoloader,否则自动加载慢、体积大、不安全
composer require drupal/foo 装不上?检查这三件事
不是命令写错,而是环境或配置卡住了。最常踩的坑不是语法,而是上下文。
- 确认当前目录是项目根目录(含
composer.json和vendor/),不是子目录如web/或modules/ - 检查
composer.json里是否锁死了drupal/core版本(例如"drupal/core": "^9.5"),而你要装的模块只支持^10.0—— 此时会报Conclusion: don't install drupal/foo x.x - 运行
composer why-not drupal/core:10.1.0查具体哪个包在阻止升级;别直接删composer.lock,那会破坏可重现性
示例:想装 drupal/config_ignore 却失败,可能是因为它要求 drupal/core >= 10.0.0,而你项目还停在 9.5.x。这时得先升级 core:composer require drupal/core-recommended:^10.1.0 --update-with-dependencies,再装模块。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
vendor 目录该不该提交到 Git?
不该。但很多人误以为“不提交 vendor 就没法部署”,其实是没配对 composer install 流程。
-
vendor/是生成物,和node_modules/一样应进.gitignore;唯一要提交的是composer.json和composer.lock -
composer.lock才是关键:它锁定每个包的精确版本和哈希值,保证composer install在任何机器上还原完全一致的依赖树 - CI/CD 中必须用
composer install --no-interaction --prefer-dist,而不是update—— 后者会重算依赖、改 lock 文件,破坏可重现性
性能影响:不提交 vendor 让仓库变小、克隆变快;但首次部署需多几秒下载依赖 —— 这是合理权衡,不是缺陷。
Drupal 8/9/10 的 composer.json 模板差异在哪?
核心变化在 type 和 require 结构。老项目用 drupal/drupal,新项目必须用 drupal/recommended-project 或 drupal/core-recommended。
-
drupal/drupal(已废弃):把 Drupal 核心当普通包装进vendor,导致路径混乱、更新困难、无法区分核心与 contrib -
drupal/recommended-project:标准模板,web/是 docroot,vendor/在项目根,所有模块走composer require drupal/foo自动放到web/modules/contrib/ - 升级时别用
composer update drupal/core硬刷,而要用composer require drupal/core-recommended:^10.1.0 --update-with-dependencies,否则会漏掉配套的drupal/core-composer-scaffold等关键包
兼容性提醒:Drupal 10.1+ 要求 Composer 2.5+,旧版 Composer 会报 Your requirements could not be resolved 却不提示原因 —— 先运行 composer --version 确认。
最易被忽略的一点:Drupal 的 autoload 机制严重依赖 Composer 生成的 vendor/autoload.php。哪怕只是临时绕过 Composer 改了某行代码,只要没跑 composer dump-autoload,新类就不会被发现——这不是缓存问题,是自动加载映射根本没更新。

















