部署、CI/CD、新同事拉代码后首次运行必须用 composer install:它严格按 composer.lock 安装精确版本,确保环境一致;composer update 则忽略锁文件、重算依赖并强制更新锁,仅限本地有明确升级目的时使用。

composer install 和 composer update 到底该用哪个
部署、CI/CD、新同事拉代码后首次运行,必须用 composer install。它只读 composer.lock,装的是锁文件里写死的精确版本号,不解析 composer.json 里的 ^8.0 这类约束,结果可复现、可预测。
裸跑 composer update 是重算整个依赖树、强制改写 composer.lock 的操作,不是“更新项目”,是“重新协商所有包的版本”。它只应在本地明确目的时运行:验证某包新版兼容性、修复安全漏洞、或升级主框架(如 Laravel 10 → 11)。
- 首次运行
composer install时若无composer.lock,它会自动 fallback 到update并生成锁文件——这等于绕过团队约定,建议初始化后立即git add composer.lock - CI 脚本里出现
composer update,构建结果就取决于 Packagist CDN 延迟、网络抖动、甚至上游包发布时间,凌晨告警八成由此而来 - 想只升一个包?用
composer update monolog/monolog,加--with-dependencies可连带更新其直系依赖,避免子依赖卡旧版引发运行时报错
加依赖别手写 composer.json,用 require 就对了
composer require 不是下载快捷方式,而是“声明 + 安装 + 锁定”三步合一的安全路径。手写 composer.json 极易因引号漏写、逗号多写、JSON 格式错误导致后续命令失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 开发工具类(如
phpunit/phpunit、phpstan/phpstan)必须加--dev,否则会被写进require字段,上线环境也会加载,徒增内存和启动开销 - 指定版本必须带约束符:
composer require guzzlehttp/guzzle:^7.5(推荐),而不是7.5(会被解释为严格等于7.5.0,基本匹配不到) - 只想改
composer.json但不安装?加--no-update,例如composer require symfony/console --no-update,后续可单独composer update symfony/console - 遇到
Your requirements could not be resolved,大概率是 PHP 版本或扩展不满足(比如本地 PHP 8.3,但包声明只支持 8.2),可临时加--ignore-platform-reqs强装——但不能进脚本,也不能提交
Class not found 报错,90% 不是代码问题,是 autoload 没刷新
Composer 不监听文件增删。新增 PSR-4 目录、改了 autoload 配置、甚至加了 files 类型的全局函数文件,都必须手动运行 composer dump-autoload。
- 典型场景:你在
app/Helpers/下写了新工具类,composer.json里配了"files": ["app/Helpers/functions.php"],但跑起来报Class not found——这时候不是路径错了,是没重dump - 开发中频繁加类又不想每次
update,加-o生成 classmap:composer dump-autoload -o,比默认 PSR-4 查找快不少 - 如果用了
classmap或改了映射规则,建议加-a强制重生成所有 autoload 规则:composer dump-autoload -a
初始化和镜像配置这些事,一次设好少踩坑
composer init 是交互式生成合法 composer.json 的唯一安全方式,能避开低级 JSON 错误。但它不会覆盖已有文件——中途 Ctrl+C 可能留下半截 JSON,建议先 ls -la composer.json 确认,有就删掉再 init。
- 加
--name=vendor/project等参数可跳过交互,适合 CI 脚本或批量初始化 - PHP 版本约束写
php: ^8.1比php: >=8.1更安全,Composer 会据此校验环境并阻止安装失败 - 国内开发务必配阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,避免因网络波动卡在 install/update 半途 - 清缓存用
composer clear-cache,升级 Composer 自身用composer self-update,回滚用composer self-update --rollback
composer require 的参数组合,直接决定那个包会不会出现在生产容器里。

















