composer create-project 更适合新建项目,因为它直接拉取完整可运行的框架或模板项目,而 composer init 仅生成空的 composer.json 文件,需手动配置依赖、自动加载和 git 等,新手易卡壳。

composer create-project 为什么比 composer init 更适合新建项目
composer create-project 是从已有包(比如 Laravel、Symfony、或自定义模板)直接拉取完整可运行项目的命令,而 composer init 只生成空的 composer.json 文件,还得自己写依赖、设自动加载、初始化 Git——新手常卡在这一步。真实场景里,90% 的“新项目”其实是在某个框架或脚手架基础上启动的,不是从零写 composer.json。
- 如果你想要一个开箱即用的 Laravel 项目:
composer create-project laravel/laravel my-app - 想用最小化 PHP 模板(比如
php-http/skeleton):composer create-project php-http/skeleton my-api - 想跳过交互式提问、静默执行:
composer create-project --no-interaction laravel/laravel my-app - 注意:如果本地已存在同名目录且非空,命令会直接报错
Destination folder already exists and is not empty,得先删掉或换名
不指定版本时,默认拉哪个分支或 tag
不加版本参数时,composer create-project 默认使用目标包的 stable 版本,也就是最新带版本号的稳定 release(如 v10.42.0),不是 main 或 dev-master。这点容易被忽略,导致误以为拉到了最新代码,结果发现缺了刚合并进主干的新特性。
- 拉特定版本:
composer create-project laravel/laravel my-app "10.<em>"</em>(注意引号,防止 shell 把 展开) - 拉开发分支:
composer create-project laravel/laravel my-app dev-main - 查看包有哪些可用版本:
composer show laravel/laravel --all - 稳定版默认行为在 Composer 2.2+ 中更严格,如果包只有
dev-前缀的分支,不加--stability=dev会直接失败
创建后 vendor/ 为空?常见权限和镜像问题
运行完 composer create-project,进入项目目录却发现 vendor/ 下什么都没有,或者只有一半依赖,大概率是网络或权限问题,不是命令本身出错。
- 先检查是否用了国内镜像但配置失效:
composer config -g repo.packagist,确认返回的是<a href="https://www.php.cn/link/dc02ae8025eef0ecde61b00bb780abdb">https://www.php.cn/link/dc02ae8025eef0ecde61b00bb780abdb</a>或<a href="https://www.php.cn/link/ec811d0d775adc62776ba80fadd4ed19">https://www.php.cn/link/ec811d0d775adc62776ba80fadd4ed19</a>;如果返回 null,说明全局镜像没设,可能因墙超时失败 - Windows 下杀毒软件(尤其 360、腾讯电脑管家)常拦截
composer解压 zip 包,报错类似file could not be downloaded: failed to open stream: Permission denied - macOS / Linux 上当前用户对目标目录无写权限,会导致解压中途退出,现象是
vendor/目录存在但为空,错误信息里有failed to copy或mkdir(): Permission denied - 临时解决:加
--prefer-source参数改用 git clone(慢但绕过 zip 权限问题),例如:composer create-project --prefer-source laravel/laravel my-app
想用自定义模板但没发布到 Packagist 怎么办
很多团队内部用私有项目模板(比如统一预置 CI 配置、日志结构、Dockerfile),这类模板不会上 Packagist,但 composer create-project 完全支持直接从 Git URL 启动。
- 从 GitHub 私有仓库(需配置 SSH key 或 token):
composer create-project git@github.com:myorg/php-template.git my-project - 从 HTTPS + Personal Access Token(GitHub/GitLab):
composer create-project https://<token>@github.com/myorg/php-template.git my-project</token> - 从本地路径(适合调试模板):
composer create-project ./path/to/local/template my-project - 注意:本地路径必须包含有效的
composer.json,且其中"type"最好设为"project",否则某些工具(如 Laravel Installer)可能识别异常
有些模板依赖 post-create-project-cmd 脚本做后续初始化(比如替换占位符、生成密钥),但这个钩子只在 create-project 过程中触发一次,之后再 composer install 不会重跑——这点很容易漏掉,结果发现 .env 没生成、key 没生成。










