新项目拉取或部署时必须用 composer install;仅当需升级依赖版本时才用 composer update。composer install 读取 composer.lock 确保环境一致,composer update 忽略 lock 重新解析依赖,易引发兼容问题。

composer install 和 composer update 到底该用哪个
新项目拉下来或部署时,必须用 composer install;只有明确要升级依赖版本(比如改了 composer.json 里的约束,或想同步 composer.lock 中记录的最新兼容版本)才用 composer update。
误用 composer update 是 Laravel 项目上线后出问题最常见原因之一——它会无视 composer.lock 里锁定的具体版本,按 composer.json 的宽松约束重新解析并安装最新小版本,可能引入不兼容变更(比如某包 v2.3.0 有 BC break,而 lock 里原本是 v2.2.7)。
-
composer install:只读composer.lock,装里面写死的版本,保证环境一致 -
composer update:忽略 lock,重新 resolve 依赖图,生成新 lock,适合开发阶段主动升级 - CI/CD 流水线、生产部署脚本里,永远用
composer install --no-dev(除非你真要在生产跑测试)
Laravel 包没被自动发现?检查 provider 和 alias 是否手动注册
Laravel 5.5+ 支持 package auto-discovery,但前提是包的 composer.json 里声明了 "extra": {"laravel": {"dont-discover": []}} 且没被全局禁用。一旦你在根 composer.json 里写了 "dont-discover": ["*"],所有包都不会自动注册服务提供者和 facade alias。
典型现象是:装完 spatie/laravel-permission 后运行 php artisan permission:create-role报错“command not found”,或者用 Permission facade 时报类不存在。
- 先确认该包是否支持 auto-discovery(看它 composer.json 里有没有
"laravel": {"providers": [...]}) - 检查项目根
composer.json的extra.laravel.dont-discover,删掉"*"或显式列出要禁用的包 - 如果必须禁用 auto-discovery,就得手动在
config/app.php里加providers和aliases,别漏掉Facade对应的class
composer require 报错 “Root composer.json requires ... but it is not satisfiable”
这不是网络问题,是依赖冲突。Composer 在尝试把新包及其依赖,塞进当前已有的依赖图里,但找不到一组版本能同时满足所有约束。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见于给老 Laravel 项目装新版包(比如 Laravel 8.x 项目执行 composer require laravel/sanctum:^4.0),因为 sanctum v4 要求 illuminate/support ^10.0,而你的项目还卡在 v8.x。
- 先运行
composer why-not vendor/package:version(例如composer why-not laravel/sanctum:4.0.0),它会指出哪个现有包挡住了路径 - 不要盲目加
--ignore-platform-reqs,这只会掩盖问题,导致运行时报错 - 要么降级目标包(查它的旧版是否支持你当前 Laravel 版本),要么升级 Laravel(注意看官方 upgrade guide 的中间步骤)
- 临时解决可加
--with-all-dependencies,但仅限你清楚所有连带升级影响时
vendor 目录太大、安装太慢?关掉不必要的插件和镜像源
默认情况下,Composer 会启用所有插件(比如 hirak/prestissimo 已废弃,但残留配置仍会触发警告),还会尝试多个镜像源(packagist.org + 阿里云 + 华为云等),反而拖慢 resolve 速度。
真实瓶颈往往不在下载,而在 dependency resolution 阶段——Composer 要遍历成百上千个版本组合,尤其当 composer.json 里用了 ^ 或 * 这种宽泛约束时。
- 删掉
composer.json里多余的repositories块,只留一个稳定源(国内推荐{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}) - 运行
composer global remove hirak/prestissimo(Laravel 9+ 不再需要它) - 避免在
require里写"monolog/monolog": "*",换成具体最小版本如"^2.0",缩小搜索空间 -
vendor大多数时候是正常的——laravel/framework本身就有几十 MB,重点看是否含大量 dev-only 包(用--no-dev部署)
依赖管理真正的复杂点不在命令怎么敲,而在于理解 lock 文件是契约,不是快照;auto-discovery 是便利,不是魔法;报错信息里那几行 “it is locked to version X” 才是你该盯住的关键线索。










