Composer是PHP标准依赖管理器,Laravel项目必须通过它初始化;新项目必须用composer install(按lock文件精确还原),禁用update以防版本漂移;推荐直接用composer create-project而非laravel new。

Composer 不是 Laravel 的“插件”或“附属工具”,它是 PHP 项目的**标准依赖管理器**,Laravel 项目必须通过 Composer 安装和维护——没有它,laravel/laravel 根本无法初始化,php artisan 也跑不起来。
composer install 和 composer update 到底该用哪个
新拉下来的 Laravel 项目(比如从 Git 克隆、CI 下载或同事发来的压缩包),第一件事必须是运行 composer install;只有明确要升级依赖版本(例如改了 composer.json 中的约束,或想同步 composer.lock 里记录的最新兼容版本)才用 composer update。
常见错误现象:
-
composer update在生产环境或 CI 流水线里执行 → 导致依赖版本漂移,出现 BC break - 刚 clone 项目就跑
composer update→ 忽略composer.lock,装了一堆新小版本,结果本地能跑、测试环境报错
关键区别:
-
composer install:只读composer.lock,安装里面写死的版本,保证所有环境一致 -
composer update:忽略composer.lock,重新解析整个依赖图,生成新composer.lock,适合开发阶段主动升级
CI/CD 脚本或线上部署中,应固定使用:composer install --no-dev --optimize-autoloader
为什么 laravel new 不推荐用于新项目
laravel new 命令底层仍调用 composer create-project,但它额外依赖全局安装的 laravel/installer 包,这个包本身有缓存、版本滞后、网络代理兼容性差等问题。
典型失败场景:
- 内网或公司代理环境下卡住,报错
Could not find package laravel/installer - 全局
laravel/installer版本旧,新建项目却用了 Laravel 9.x,而你想要的是 10.x - Windows 上因权限问题导致
installer缓存目录写入失败,报Permission denied
更稳的做法是直接用:composer create-project laravel/laravel myapp,或指定版本:composer create-project laravel/laravel myapp "10.*"
composer require 报 “not satisfiable” 怎么办
这不是网络超时或镜像问题,而是 Composer 在尝试把新包塞进现有依赖图时,发现**根本找不到一组版本能同时满足所有约束**。比如你当前已装 spatie/laravel-permission:^5.0,又执行 composer require laravel/sanctum:^3.0,但 Sanctum 3.x 要求 illuminate/support:^10.0,而 Permission 5.x 锁在 ^9.0,冲突就产生了。
排查步骤:
- 先运行
composer why-not vendor/package:version(如composer why-not laravel/sanctum:3.0)看谁挡路 - 检查
composer.json里是否写了过严的版本约束(比如"php": "^8.1"写成"php": "8.1.10") - 确认是否启用了
"dont-discover": ["*"]—— 这会导致部分包注册失败,间接引发后续依赖解析异常
临时解法(慎用):composer require vendor/package --with-all-dependencies,但务必验证功能是否正常
.env 和 APP_KEY 漏掉会怎样
很多新手跑完 composer create-project 就直接 php artisan serve,结果页面空白或报 Undefined index: APP_KEY —— 因为 Laravel 启动时会强制校验 APP_KEY,而它只来自 .env 文件。
必须做的两件事:
- 复制
.env.example为.env(不是重命名,是复制后编辑) - 运行
php artisan key:generate,它会往.env里写入APP_KEY=base64:...
容易被忽略的点:
-
.env文件权限不能是 777,但必须让 Web 服务器用户(如 www-data 或 _www)有读取权 - 修改
.env后,Artisan 命令和 FPM 请求可能缓存配置,需清空bootstrap/cache/config.php或运行php artisan config:clear - Docker 环境下,
.env若挂载为 volume,注意换行符(Windows CRLF 可能导致解析失败)


















