“project directory is not empty”是硬性拒绝错误,因create-project语义为从零克隆骨架,禁止覆盖任何文件(含.git、.env.example等),无--force参数可绕过,唯一可靠解法是手动清空目录或换新空目录安装。

Project directory is not empty 是硬性拒绝,不是警告
这个提示不是让你“确认一下”,而是 Composer create-project 在发现目标目录里有任何文件(哪怕只有 .git 或 .env.example)时直接中止执行。它不提供覆盖选项,设计上就要求目标路径是空白画布。
常见误判点:
-
rm -rf myapp/*不够——.git是隐藏目录,没被删掉,下次照样报错 -
composer init不能替代create-project:它只生成composer.json,不会拉框架结构(比如 Laravel 的app/、routes/、artisan) - IDE 自动生成的
.vscode/、.idea/也会触发该错误,容易被忽略
怎么安全清空并重试?别跳过 .git
必须确保目标目录完全为空,包括所有隐藏文件。Windows 和 macOS 下尤其要注意 .git 是否残留。
推荐操作顺序:
- 先用
rm -rf myapp彻底删除整个目录(Linux/macOS) - Windows 用户可用
rmdir /s /q myapp,或资源管理器中手动确认.git文件夹已消失 - 再新建空目录:
mkdir myapp - 最后运行:
composer create-project laravel/laravel myapp
不要试图加 --no-interaction 或 -n 绕过——这些参数只关闭交互提示,不绕过空目录检查。
镜像源导致的“假空目录”失败
有时候目录明明是空的,create-project 却卡在依赖解析阶段,甚至报 does not match your minimum-stability。这往往不是目录问题,而是镜像源过滤了 -dev 包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
典型场景:
- 阿里云镜像在某些时段未同步
fruitcake/php-cors ^1.3的1.3.x-dev版本 - Composer 尝试从镜像拉包失败后,不会明确提示“源不可用”,而是表现为“目录非空”或静默超时
- 全局镜像配置被项目级
composer.json中的"repositories"字段覆盖,导致你以为切了源,其实没生效
验证方式:composer config -g repo.packagist 必须输出完整 URL;若为空或报错,说明全局配置根本没写入。
想保留 vendor 但重装?用 --force-reinstall
如果只是 vendor 损坏或部分文件被意外修改,不需要删整个目录再 create-project。此时应进已有项目根目录,执行:
composer install --force-reinstall
它的作用是:
- 不删
vendor/目录结构,但对每个包执行卸载 + 重装 - 重建 autoload 映射,重跑
post-install-cmd脚本 - 严格按
composer.lock安装,结果可复现,适合 CI/CD
注意前提:composer.lock 必须已更新到最新——如果刚改了 composer.json 却没运行 composer update --lock-only,--force-reinstall 仍会装旧版本。
最常被忽略的一点:Windows 下 --force-reinstall 可能因文件被占用失败,需提前关掉 PhpStorm 索引、Xdebug、Swoole 进程等一切可能锁住 vendor 文件的程序。










