composer create-project 要求目标目录为空(含 .git、.env 等),而 composer install 不检查根目录是否为空,只校验 vendor/ 与 composer.lock 是否匹配;中断后应优先 --dry-run 判断是否可续装,再按需清理 autoload 或用 --force-reinstall 安全重装。

直接报错 Project directory "/root/." is not empty,说明你正在一个已有内容的目录里执行 composer create-project,而不是 composer install——这两个命令行为完全不同,不能混用。真正需要“覆盖安装”或“应对目录非空”的场景,几乎都落在 composer install 中断、权限混乱或 vendor 残留导致的后续失败上。
为什么 composer install 会说“目录不为空”?
它根本不会报这个错。composer install 只关心 vendor/ 目录是否与 composer.lock 匹配,不检查项目根目录是否为空。你看到的 Project directory ... is not empty 一定来自 create-project 或 init 类命令。
-
create-project要求目标路径必须是空目录(连.git、.env都算“非空”) - 如果你在
/root下运行composer create-project laravel/laravel .,而/root里有.bashrc、.ssh等,就必然失败 - 正确做法是先
mkdir /path/to/myapp && cd /path/to/myapp,再运行create-project
composer install 被中断后怎么安全续装?
中断后 vendor/ 处于半写入状态:部分包存在、autoload 文件可能损坏、但 composer.lock 仍是完整的。此时删整个 vendor/ 是最粗暴也最容易出错的方式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先跑
composer install --dry-run:如果输出里大量出现Skipped,说明 Composer 能识别已安装部分,直接再跑一次composer install就能续上 - 如果
--dry-run报错(比如提示autoload.php not found),再清理:rm -f vendor/autoload.php && rm -rf vendor/composer/ - 接着
composer dump-autoload重建映射,最后composer install - 不要只删
vendor/下某几个子目录——Composer 不会“补全半截包”,它只认composer.lock的完整快照
想强制重装所有包,但保留 composer.lock?
用 composer install --force-reinstall。它不删 vendor/、不改 lock,但会按 lock 逐个重新下载解压、重建 autoload、重跑 post-install-cmd 脚本。
- 适用场景:vendor 权限错乱、某些 bin 脚本没执行位、cache 目录不可写但你想一并修复
- 比
rm -rf vendor && composer install更稳,尤其在 CI 环境里避免缓存失效 - 注意:它仍会执行所有安装脚本,如果某个脚本依赖外部服务(如 DB 连接),得确保环境就绪
备份镜像配置后恢复失败,常见在哪卡住?
直接拷回旧版 config.json 到 ~/.composer/ 常失效,不是因为文件丢了,而是 Composer 会静默忽略格式错误或废弃字段(比如老写法 repositories.packagist.org)。
- 优先用命令恢复:
composer config --global repos.packagist composer https://mirrors.aliyun.com/composer/ - 批量恢复用
--merge:composer config --global --merge backup.json,它只覆盖 JSON 里的字段,不删你本地私有仓库认证等未备份项 - 恢复后必跑
composer diagnose:它会报Invalid repository URL或The lock file is not up to date,这两条才是真实生效信号
真正麻烦的从来不是“怎么覆盖”,而是覆盖之后 autoload 没生效、类找不到、脚本权限丢失却查不出原因——别急着重装,先看 vendor/autoload.php 是否被引入,再核对 composer.json 里 autoload.psr-4 的路径末尾有没有多斜杠、大小写是否和实际目录一致。










