PHP Deployer 应作为项目级依赖安装,禁用 composer global require:因全局安装会导致配置识别失败、多版本冲突、PATH 或 PHP 版本错配、CI/CD 不稳定;正确方式是 composer require deployer/deployer --dev 后用 vendor/bin/dep 调用。

PHP Deployer 不是靠 Composer “安装”到系统全局的工具,而是作为项目级依赖引入;直接用 composer global require 会引发权限、路径和版本冲突问题,不推荐。
为什么不能用 composer global require deployer/deployer
全局安装看似方便,但实际踩坑密集:
-
deployer命令依赖当前项目的deploy.php配置,而全局二进制无法自动识别项目上下文,常报No deploy.php found - 不同项目可能需要不同版本的 Deployer(如 v7 和 v8 的
task()语法不兼容),全局只能存在一个版本 - 某些系统(尤其是 macOS M1/M2 + Homebrew PHP)下,
composer global的 bin 目录未加入$PATH,或与系统php版本错配,导致命令找不到或报Class 'Deployer\Deployer' not found - CI/CD 环境中,全局安装需额外配置缓存和权限,不如声明式依赖可靠
正确做法:按项目本地安装 + vendor/bin/dep 调用
这是 Deployer 官方文档默认方式,也是最稳定、可复现的实践:
- 在项目根目录运行:
composer require deployer/deployer --dev(--dev表明它不是运行时依赖) - 初始化配置:
vendor/bin/dep init→ 选择框架(如 Laravel、Symfony)或 PHP 通用模板,生成deploy.php - 部署时始终用:
vendor/bin/dep deploy staging(而非dep deploy) - 如果嫌
vendor/bin/dep太长,可在项目根目录加 shell 别名,例如alias dep='./vendor/bin/dep',但不要写入全局.bashrc(避免跨项目污染)
常见错误:执行 dep 报 Class not found 或 command not found
本质是路径或 autoloader 问题,优先检查以下三点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
立即学习“PHP免费学习笔记(深入)”;
- 确认
vendor/autoload.php存在且可读 —— 若刚运行composer install后仍报错,尝试删掉vendor/重装 - 检查
deploy.php开头是否包含namespace或require了非标准路径(Deployer v7+ 要求配置文件必须是纯 PHP 脚本,不能有命名空间) - Linux/macOS 下注意文件权限:
chmod +x vendor/bin/dep(Windows Git Bash 用户也建议执行) - 若用 Docker 或 CI,确保
composer install --no-dev没把deployer/deployer给删了 —— 它必须保留在--dev环境中
进阶:多项目共用配置时怎么避免重复安装
Deployer 本身不支持“全局配置中心”,但可通过软链接或 Git subtree 解耦:
- 把通用
deploy.php提取为独立 Git 仓库(如my-company/deploy-config),在各项目中用composer config repositories.deploy-config path ../deploy-config+composer require my-company/deploy-config:dev-main --dev - 更轻量的做法:用
cp或curl在 CI 中拉取统一配置模板覆盖,再运行vendor/bin/dep—— Deployer 只认当前目录下的deploy.php,不关心它怎么来的 - 切勿用
composer create-project初始化项目来“套壳”,Deployer 不是框架,不需要模板继承机制
真正麻烦的从来不是安装命令敲几下,而是部署脚本里那个没写 set('writable_mode', 'chmod') 导致线上 storage/ 权限错乱,或者 dep deploy 时忘了 git pull 已经失败却继续跑迁移 —— Deployer 的可靠性,90% 取决于你对 deploy.php 里每个钩子的理解深度,而不是它装在哪。


















