drupal 9+ 必须用 composer 管理依赖,跳过会导致自动加载失败、ci 漂移;安装模块需确保在项目根目录、版本兼容、用 drupal/core-recommended 升级核心;启用/卸载模块须先 composer require/remove 再 drush en/uninstall;部署只运行 composer install --no-dev --optimize-autoloader,且 composer.lock 必须提交。

Drupal 9+ 项目里,composer 不是“可选工具”,而是自动加载、依赖解析、升级一致性的唯一可信来源;跳过它直接操作 web/modules/contrib/ 或 vendor/,不出三天就会遇到 Class not found、drush cr 失败、CI 构建漂移。
composer require 装不上模块?先看这三处硬性卡点
不是命令写错,而是环境或配置拦住了。最常被忽略的其实是上下文约束:
- 当前目录必须是项目根目录(含
composer.json和vendor/),不是web/、modules/或子目录 -
composer.json中"drupal/core"锁死在"^9.5",而你要装的drupal/config_ignore要求^10.0—— 此时会报Conclusion: don't install drupal/config_ignore x.x - 没运行
composer why-not drupal/core:10.1.0查具体哪个包在阻断,就删composer.lock或强行改版本,等于主动放弃可重现性
示例:想装 drupal/devel 却失败,运行 composer show drupal/core-recommended 看当前核心版本,再查该模块的 drupal.org 页面 的兼容性说明,对齐后再执行 composer require drupal/devel:^5.1。
升级 Drupal 核心必须用 drupal/core-recommended,别碰 drupal/core
drupal/core 是裸核心代码包,不带 scaffold 文件(如 index.php、.htaccess)和依赖策略;直接升级它会导致 web 根目录缺失关键入口文件,站点 500。
- 始终升级
drupal/core-recommended:它封装了 core +drupal/core-composer-scaffold+ 合理的自动加载规则 - 加
--with-all-dependencies(不是--with-dependencies)确保symfony/*、guzzlehttp/guzzle等关联组件同步更新 - 升级后务必检查
git status:确认composer.lock、web/core/、web/modules/contrib/下的文件是否成对变更,否则说明 vendor 与 web 不一致
漏掉 scaffold 更新的典型现象:首页白屏,但 drush status 显示正常——其实是 web/index.php 还是旧版,没适配新核心的启动流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
模块启用 ≠ 模块安装,drush pm:enable 不能替代 composer require
drush pm:enable 只切换模块的启用状态,不下载代码、不注册自动加载、不校验依赖。手动把模块文件扔进 web/modules/contrib/,Composer 完全不知道这件事。
- 后果:下次
composer update可能删掉你手动放进去的模块;drush cr报Class 'Drupal\devel\DevelController' not found;CI 部署时该模块根本不存在 - 正确顺序:先
composer require drupal/token→ 再drush en token→ 最后drush cr - 卸载也一样:先
drush pm:uninstall token(清理配置),再composer remove drupal/token(删代码和锁版本)
如果你看到模块在后台已启用但功能异常(比如 Token UI 不显示),第一反应不该是清缓存,而是跑 composer show drupal/token 确认它是否真被 Composer 记录并加载。
部署时只跑 composer install --no-dev --optimize-autoloader,别信“本地 vendor 提交到 Git”
有人误以为不提交 vendor/ 就没法上线,其实是没配对部署流程。生产环境必须靠 composer install 重建依赖,而不是 rsync 本地 vendor/。
-
composer.lock必须提交到 Git,它是所有环境依赖一致的唯一依据 - 禁用 dev 包:
--no-dev防止测试类、调试工具进入生产环境 - 开启优化:
--optimize-autoloader生成静态映射表,避免每次请求都扫描文件系统,PHP 自动加载提速 3–5 倍
容易被忽略的一点:Web 服务器文档根必须指向 web/,且 composer.json、vendor/、web/sites/default/settings.php 等敏感路径要明确禁止 HTTP 访问——这些不是 Composer 的事,但没配好,前面所有操作都白搭。










