Drush 8+必须通过Composer在每个Drupal项目中单独安装,禁用全局安装;推荐执行composer require --dev drush/drush:^12,使用vendor/bin/drush调用,Windows用户需用php vendor\bin\drush.php。

Drush 8 及以上版本必须通过 Composer 安装,直接下载 Phar 文件或全局 composer global require 已不再推荐——它会污染全局依赖、引发版本冲突,且 Drupal 9+/10 项目中无法正确解析命令。
为什么不能用 composer global require drush/drush
全局安装会让 Drush 加载所有已安装的 Composer 包的 autoloader,极易与项目内 Drupal 的依赖(如 Symfony 组件版本)发生冲突。常见表现:
- 执行
drush cr报错Class 'Symfony\Component\Console\Application' not found -
drush status显示 PHP 版本正常,但实际调用的是系统级而非项目级 autoloader - 在多项目环境中,一个项目升级 Drush 后,其他项目突然命令失效
正确做法是:每个 Drupal 项目单独管理 Drush 依赖。
在已有 Drupal 项目中安装 Drush(推荐方式)
确保你已在项目根目录(即含 composer.json 和 web/ 或 docroot/ 的目录),然后运行:
composer require --dev drush/drush:^12
说明:
-
--dev表示 Drush 是开发依赖,不会被部署到生产环境(符合安全规范) - Drush 12 是目前对 Drupal 10 最兼容的稳定版;若项目为 Drupal 9.5+,也可用
^11,但避免^10(已 EOL) - 安装后,Drush 可执行文件位于
vendor/bin/drush,建议直接使用该路径或加./vendor/bin/前缀调用
验证 Drush 是否识别当前 Drupal 站点
Drush 必须能自动发现 web/(或 docroot/)下的 Drupal 核心和 settings.php。常见失败原因:
- 未在 Drupal 项目根目录执行命令(例如误在
web/内运行drush cr) -
settings.php权限为只读,或包含语法错误导致 Drupal 自身无法加载 - 项目使用了非标准目录结构(如
public/替代web/),需手动指定:drush --root=public --uri=https://example.com cr
成功识别后,drush status 应显示 Drupal version、Site URI、Database hostname 等字段,而非报错 Could not find a Drupal settings.php file。
Windows 用户注意 PATH 与符号链接问题
Windows 默认不支持 Composer 自动生成的 Unix 风格符号链接,vendor/bin/drush 可能是 .bat 文件但无法正确转发参数。解决方案:
- 始终用完整路径调用:
php vendor\bin\drush.php cr(注意是.php后缀) - 或改用
php -d variables_order=EGPCS ./vendor/autoload.php ./vendor/drush/drush/drush.php cr(绕过 bin wrapper) - 禁用 Git Bash 的 Windows 路径转换(在终端中执行
export MSYS_NO_PATHCONV=1)
别指望 drush 命令能像 Linux/macOS 那样无前缀运行——这是 Windows 下 Composer + Drush 的固有限制,不是配置错了。










