Composer create-project 不支持在非空目录执行,因设计上要求目标路径为空以确保“项目克隆+安装”语义;若目录含任何文件(含.git、composer.lock等)即报错。

Composer create-project 本身不支持“重塑”或二次初始化已有目录——它只在目标路径为空或不存在时才正常执行;若目录已存在且含 composer.json,命令会直接报错退出。
为什么 create-project 在非空目录下失败
Composer 内部会检查目标路径是否为“干净目录”:只要存在任意文件(包括 .git、README.md 或隐藏文件),就会抛出 Could not create project: Project directory is not empty。这不是 bug,而是设计约束——它本质是“项目克隆+安装”,不是“模板覆盖”工具。
常见误操作包括:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 想用
composer create-project vendor/name .覆盖当前目录(失败) - 先
git clone了脚手架再跑create-project(失败) - 手动删了
vendor/但留着composer.lock(仍失败)
绕过限制的三种可行做法
真正能落地的方式只有三个,按推荐顺序排列:
-
清空目录后重跑:用
rm -rf !(composer.json|composer.lock)(zsh)或find . -mindepth 1 ! -name 'composer.json' ! -name 'composer.lock' -exec rm -rf {} +(bash)保留关键配置再执行composer create-project vendor/name . --no-install,最后composer install -
改用
git clone+composer install:跳过create-project,直接git clone https://github.com/vendor/name.git .,再composer install;适合脚手架本身是公开仓库的场景 -
写个轻量 wrapper 脚本:检测目录非空时自动备份旧
composer.json、清理、拉取、恢复关键配置项(如extra、scripts),比硬套create-project更可控
create-project 的隐含行为必须确认
它不只是复制文件,还会触发一系列 Composer 内置逻辑:
- 自动执行
post-root-package-install和post-create-project-cmd脚本(很多脚手架靠这个做初始化) - 强制使用
--prefer-dist,忽略本地path仓库配置 - 如果模板包定义了
type: project,则autoload和autoload-dev会被忽略(这是 Laravel 等框架模板的常见设定) - 不继承父级
composer.json中的config字段(比如process-timeout或fxp-asset配置)
真正麻烦的是那些依赖 post-create-project-cmd 做环境检测、密钥生成或交互式配置的脚手架——一旦你绕过 create-project 直接 install,这些步骤就彻底丢失,得手动补全或重写逻辑。

















