composer create-project是唯一能从远程包完整复制项目骨架并自动安装依赖的命令,本质是“克隆+composer install”封装,必须指定包名、目标空目录和版本(可选),默认拉stable版,不支持--version选项。

直接用 composer create-project,别试 composer init 或 composer install —— 它们不是干这个的。
为什么 composer install 不能初始化新项目
你本地没有 composer.lock 文件时,composer install 会直接报错:No composer.lock file present. You must run 'composer install' to generate one. 这是个死循环提示,信了就卡住。它只负责“还原已有锁文件的依赖”,不拉骨架、不建目录、不跑初始化脚本。
create-project 是唯一能从远程包(比如 laravel/laravel)完整复制项目结构 + 自动运行 post-create-project-cmd(如生成 .env、APP_KEY)的命令。
- 目标包必须是
"type": "project",否则会被当成普通库装进vendor/,而不是展开成项目根目录 - 默认只拉
stable版本(如v11.2.0),不是main分支;要dev版得加--stability=dev - 如果执行后
vendor/为空,大概率是网络中断、权限不足或镜像源失效,不是命令写错了
composer create-project 必须传的三个参数怎么填
最简形式是 composer create-project vendor/name target-dir,但漏掉任一关键点都会失败:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
target-dir必须是不存在的空目录,否则报Project directory is not empty;不能是.(当前目录),除非你确认它是空的 - 包名要精确匹配 Packagist 上注册的名称,比如 ThinkPHP6 是
topthink/think,不是thinkphp/think - 版本号要用引号包裹,尤其是含
^或*时,例如"6.0.*"或"^10.0";只写10会被 shell 展开或解析失败 - 国内用户常因镜像不同步导致
Could not find package,临时切回官方源:composer config -g repo.packagist composer https://packagist.org
常见失败现象和立刻能试的解法
执行完命令,发现项目目录里缺 vendor/autoload.php、.env 或根本没生成 public/,先别重跑,看这几条:
- 提示
zlib_decode(): data error→ Composer 缓存损坏,删掉~/.composer/cache/再试 - Windows 下路径含中文或空格 → 换成全英文路径,例如
C:/dev/myapp,否则解压阶段可能静默失败 - Linux/macOS 报
file_put_contents(./composer.json): failed to open stream→ 当前用户对目标目录无写权限,别用sudo,改用chown或换用户目录 - 执行完没
vendor/autoload.php→ 很可能是网络超时导致composer install中断,进目录手动补:composer install --no-interaction
自定义模板为什么 create-project 找不到包
不是包不存在,而是默认只搜 stable 版本,而你的模板包很可能还没打正式 tag,只有 dev-main 或 dev-master 分支。
典型现象:composer show vendor/name 能查到,但 create-project 找不到——因为 show 默认查所有稳定性,create-project 默认只查 stable。
- 加
--stability=dev强制允许开发版:composer create-project vendor/name --stability=dev - 检查包是否声明
"type": "project":composer show vendor/name | grep type,输出含project才能用create-project - 私有模板需提前在
composer.json里配置repositories,否则create-project根本不识别源地址 -
post-create-project-cmd脚本必须定义在模板包自己的composer.json根层级,不是下游项目的配置里
最容易被忽略的是:钩子脚本执行时工作目录是新建项目的根目录,不是模板源码目录;别依赖 $PWD 或相对路径去读取模板里的文件。










