Drupal项目必须用Composer管理依赖,基于drupal/recommended-project初始化,通过composer require/update/remove操作模块,升级核心用composer update drupal/core-recommended,禁用手动修改core/,部署时用composer install --no-dev并提交composer.lock。

在Drupal项目中用Composer管理模块和核心,核心原则是:不直接修改vendor/或core/目录,所有依赖通过composer.json声明,用composer install和composer update统一控制。
初始化项目时使用官方推荐模板
不要从drupal.org下载tar包再手动加Composer,而是直接基于drupal/recommended-project创建项目:
- 运行
composer create-project drupal/recommended-project my-site - 该模板已预配置自动加载、核心锁定策略(如
"drupal/core-composer-scaffold")、web/文档根目录结构 - 生成的
composer.json里drupal/core被设为^10.2(以Drupal 10为例),而非*,避免意外升级破坏兼容性
安装和更新模块必须走Composer命令
禁用drush en或后台启用后手动复制模块文件的方式:
- 安装新模块:
composer require drupal/token:^1.12(指定兼容版本) - 更新已有模块:
composer update drupal/views --with-dependencies(确保依赖同步) - 卸载模块前先
composer remove drupal/pathauto,再用drush pm:uninstall pathauto清理配置 - 避免用
composer require drupal/module-name不带版本号——可能拉取不兼容的dev分支
正确处理核心升级与自定义补丁
Drupal核心升级不是替换core/文件夹,而是升级drupal/core包:
- 升级核心:
composer update drupal/core-recommended --with-all-dependencies(推荐,含核心及关联组件) - 若需应用社区补丁(如临时修复),用
cweagans/composer-patches插件,在composer.json中配置"patches"段,不修改core/源码 - 禁止在
core/目录内做任何手工修改——这些变更会在下次composer update时被覆盖
部署和CI/CD中的关键约束
生产环境必须依赖composer install --no-dev --optimize-autoloader,并确保:
-
composer.lock随代码提交,保证各环境依赖完全一致 - Web服务器文档根指向
web/,且vendor/和web/sites/之外的敏感目录(如composer.json)不可被HTTP访问 - CI流程中加入
composer validate和composer outdated --direct检查过期模块










