composer create-project 是安装框架的唯一合理方式,它拉取带完整骨架的可运行项目;global require 仅适合命令行工具,无法提供框架必需的目录结构和入口文件。

composer create-project 是装框架的唯一合理方式,不是“安装框架”,而是拉取带完整骨架的可运行项目。别用 composer global require 或 composer init,那俩根本起不来。
为什么不能用 composer global require 装框架
全局装 symfony/framework-bundle 或 laravel/laravel 只是把单个包扔进 ~/.composer/vendor/,没 public/index.php、没 src/Kernel.php、没 config/ 目录,更没有 bin/console 或 artisan 入口。运行时直接报 Class 'App\Kernel' not found 或 No routes found。
-
global require适合装命令行工具(如phpunit、larastan),不适合装框架 - 框架必须按项目隔离:每个项目有自己
vendor/、自己的自动加载规则、自己的环境配置 - 强行拼凑会导致 PSR-4 映射错乱、服务容器注册缺失、路由未绑定到内核
create-project 必须指定包名和版本
漏掉包名会报 Not enough arguments (missing: "package");不加版本号可能拉到不稳定分支或失败(尤其当包只有 dev-main 时)。
- Laravel 最新版:
composer create-project laravel/laravel myapp - Laravel 10.x(避免自动上 11):
composer create-project laravel/laravel myapp "10.*"(双引号防 shell 展开*) - Symfony 纯 API 骨架:
composer create-project symfony/skeleton myapi - Symfony Web 应用:
composer create-project symfony/website-skeleton myweb - Slim 官方模板:
composer create-project slim/slim-skeleton my-slim-app
常见卡住/失败原因和对应动作
命令跑着不动、报错退出、vendor 为空——大概率不是命令写错,而是环境或网络问题。
- 卡在无输出、CPU 占用低:国内直连
packagist.org失败,先确认镜像:composer config -g repo.packagist,再临时切源运行,例如:composer create-project --repository=https://packagist.phpcomposer.com laravel/laravel myapp - 报
Destination directory "myapp" is not empty:目录已存在且非空,删掉重来,--remove-vcs不解决这个问题 - 报
Failed to extract xxx: unable to decompress gzipped phar:Composer 缓存损坏,运行composer clear-cache后重试 - 生成后
vendor/为空或不全:检查 PHP 版本是否满足框架要求(如 Laravel 11 需 PHP 8.2+),php -v必须先过
创建完立刻要验证的三件事
别急着写代码。骨架拉下来只是开始,很多问题这时才浮出水面。
- 确认
public/index.php存在且可读——这是 Web 入口,缺失说明 skeleton 拉取失败或被误删 - 运行
php -S localhost:8000 -t public测试内置服务器能否响应;若报Failed to open stream: No such file,重点查public/index.php里require __DIR__ . '/../vendor/autoload.php'这行路径是否正确 - 执行
php artisan serve(Laravel)或php bin/console server:start(Symfony)前,先确保php命令指向的是你认为的那个版本——多 PHP 环境下which php和php -v结果不一致,会导致密钥生成失败或.env写错格式
真正麻烦的从来不是敲哪条命令,而是你信不信这个包的 composer.json、信不信它的 post-create-project-cmd 脚本能适配你的系统、信不信你当前 shell 的工作目录和权限刚好够它解压并写文件——少一个,create-project 就只是个半成品。











