create-project 命令本质是「克隆指定包的项目骨架 + 自动执行 composer install」的封装,拉取含 composer.json、vendor 等的完整稳定版模板;必须指定包名和目标目录(不可已存在),支持通过第三个参数指定版本,不支持 --version 选项。

create-project 命令到底在干啥
它不是“新建空文件夹再装包”,而是从指定包(比如 laravel/laravel)的最新稳定版中,把整个项目骨架(含 composer.json、vendor 目录、基础脚本)一次性拉下来并安装依赖。本质是「克隆 + composer install」的封装。
常见错误现象:create-project 执行完发现没生成 vendor/autoload.php,或者报 Could not find package —— 大多因为包名拼错、网络连不上 Packagist,或用了已废弃的别名(比如旧教程里的 laravel/framework)。
- 必须指定包名,不能只写
composer create-project(会报错) - 默认安装
stable版本;加--stability=dev才能拉dev-main或dev-develop - 如果目标包没有
composer.json的autoload配置,生成的项目可能无法自动加载类 —— 这不是命令问题,是模板本身不规范
怎么指定版本和目录
版本控制靠第二个参数,不是用 --version 选项(这个选项不存在)。格式是:composer create-project vendor/name target-dir version。
使用场景:想用 Laravel 10.x 而不是最新的 11.x,或基于某个特定 Tag 初始化:
-
composer create-project laravel/laravel myapp "10.*"→ 安装 10.x 最新稳定版 -
composer create-project symfony/skeleton myapp "v6.4.0"→ 精确到 Tag -
composer create-project codeigniter4/appstarter myapp→ 不写版本,默认 latest stable - 目录名
myapp必须不存在,否则报Destination folder already exists
为什么有时卡在 “Installing dependencies” 或报错
根本原因:create-project 内部执行了 composer install,所以所有 install 遇到的问题都会在这里复现。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
典型表现:Loading composer repositories with package information 卡住、Failed to download ext-xxx、或提示 Your requirements could not be resolved。
- 检查 PHP 版本是否满足目标项目要求(比如 Laravel 11 要 PHP 8.2+,用 8.1 就会失败)
- 某些包依赖扩展(如
ext-gd),但本地 PHP 没启用 → 报ext-gd * is missing - 公司内网可能屏蔽 Packagist,需提前配置镜像:
composer config -g repos.packagist composer https://packagist.phpcomposer.com - 加
-vvv参数看详细日志,比盲猜快得多
和 git clone + composer install 有啥区别
区别不在功能,而在行为边界:create-project 会强制清空目标目录、跳过 Git 克隆步骤、且不保留原仓库的 .git —— 它产出的是一个“干净的可部署副本”,不是开发工作区。
性能影响很小,但兼容性上要注意:
- 如果项目模板里写了
"post-create-project-cmd"脚本(比如 Laravel 的php artisan key:generate),它会被自动触发;而git clone后要手动跑 - 某些私有包启用了
composer install --no-dev逻辑,create-project默认也会跳过require-dev,除非加--dev - 不能用
create-project初始化基于 Git Submodule 或自定义 installer 的复杂模板 —— 它只认标准 Composer 包结构
最常被忽略的一点:create-project 不会帮你配 Web 服务器、改 .env、或处理数据库迁移。它只管把代码和依赖就位,剩下的还是得自己来。










