composer create-project 才是真正新建项目的方法,它拉取代码、安装依赖、初始化目录结构并执行初始化脚本;而 composer init 仅生成空的 composer.json 文件,不安装包也不创建目录。

直接用 composer create-project,别碰 composer init —— 后者只生成空配置,不装包、不建目录结构,根本不算“新建项目”。
create-project 和 init 的本质区别
很多人搜“composer新建项目”,一上来就跑 composer init,结果发现目录空空如也,vendor/ 没有,index.php 也没影——因为 composer init 只写 composer.json,连文件夹都不帮你建。
composer create-project 才是真正的新建:拉代码、装依赖、初始化目录、执行 post-create-project-cmd 脚本(比如 Laravel 的 key 生成)。
-
composer init→ 适合已有项目补配置 -
composer create-project laravel/laravel myapp→ 真正开新项目 - 没指定包名时(如
composer create-project),会报错:Not enough arguments
常见目标框架的 create-project 写法
不同项目模板对参数敏感,漏掉版本或选项会导致拉错分支、装不上扩展、甚至卡在交互式提问里。
- Laravel 最新版:
composer create-project laravel/laravel myapp - Laravel 10.x(避免自动上 11):
composer create-project laravel/laravel myapp "10.*" - Symfony Web 应用:
composer create-project symfony/skeleton myapp(不是symfony/framework-bundle) - 纯 PHP 包(如 PHPUnit 模板):
composer create-project phpunit/phpunit-skelgen myapp
注意:双引号包裹版本号是必须的,否则 shell 会把 * 当通配符展开,报 No such file or directory。
为什么有时卡住不动?网络和镜像问题
create-project 默认走 packagist.org,国内直连大概率超时或 404,表现为命令停住、无输出、CPU 占用低、等十分钟也不报错。
- 先确认是否用了镜像:
composer config -g repo.packagist,应返回带mirrors的 URL - 临时切镜像运行:
composer create-project --repository=https://packagist.phpcomposer.com laravel/laravel myapp - 如果项目含大量 dev-dependencies(如测试工具),加
--no-dev能显著提速:composer create-project --no-dev laravel/laravel myapp
不加 --no-interaction 时,部分模板会问数据库前缀、APP_NAME 等,卡在 stdin 等输入——CI/脚本场景务必加上。
项目生成后立刻要检查的三件事
生成完不是终点,很多问题这时才暴露,尤其当你准备立刻 php artisan serve 或 symfony server:start。
- 检查
vendor/autoload.php是否存在 —— 不存在说明依赖安装失败,看composer install日志里的failed行 - 运行
ls -la确认myapp/下有artisan(Laravel)或bin/console(Symfony),没有说明模板拉取不完整 - PHP 版本是否匹配:Laravel 10 要 PHP 8.1+,
php -v错了会报Your requirements could not be resolved,但错误在create-project过程中被吞掉
最常被跳过的其实是权限:Windows 上用 WSL 创建的项目,回到 Windows 编辑器可能因 vendor/ 权限混乱导致 autoload 失效,这时候别硬试,删掉重来更省时间。










