该跑 composer install;它严格按 composer.lock 安装写死版本,确保环境一致;无锁文件时才退化为解析 composer.json 并生成新锁。

composer install 和 composer update 不是手速问题,是环境是否可控的问题——用错一个,线上就可能挂。
刚拉完别人项目,该跑 install 还是 update?
无脑跑 composer install。它只读 composer.lock,装里面写死的版本号,确保你和提交者、CI、生产环境一模一样。
- 如果没
composer.lock,install会自动 fallback 到update并生成新锁文件——这等于绕过团队约定,建议初始化后立刻git add composer.lock -
composer update会忽略composer.lock,重新解析composer.json,改锁文件,升级所有满足约束的包——除非你在本地调试兼容性或验证安全补丁,否则别碰 - CI 脚本里出现
composer update,等于把构建结果交给网络延迟和上游发布时间,凌晨告警大概率由此而来
加个新包,为什么不能手写 composer.json 再 install?
手写容易漏字段、错格式、版本约束不带符号,导致后续解析失败或装错版本。必须用 composer require,但参数要对:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 - 确认是 PHP 版本限制(如本地 PHP 8.3,但包声明只支持 8.2)?可临时加
--ignore-platform-reqs强装——但别提交,CI 禁用
Class not found 报错,90% 不是命名空间写错了
是 autoloader 没刷新。Composer 不监听文件增删,新增 PSR-4 目录、改了 autoload 配置、甚至改了 files 类型的全局函数文件,都必须手动运行 composer dump-autoload。
- 开发中频繁加类又不想每次
update,加-o:composer dump-autoload -o,生成 classmap,比默认 PSR-4 查找更快 - 用了
filesautoload(比如src/functions.php),改了那个文件也得重dump,否则不会生效 - 生产环境进一步提速?加
--classmap-authoritative:composer dump-autoload --optimize --classmap-authoritative
vendor/autoload.php 必须放在入口文件最前面
不是“习惯”,是 PHP 自动加载机制决定的——它是一次性注册,一旦某个类名被首次引用而未定义,就会触发 fatal error,后续的 require_once 补救完全无效。
- 错误写法:
session_start(); echo 'hello'; require 'vendor/autoload.php'; new Monolog\Logger('app');→ 报Cannot send session cache limiter或Class 'Monolog\Logger' not found - 正确写法:第一行就是
require __DIR__ . '/vendor/autoload.php';,且确保路径用__DIR__,不用./vendor/autoload.php(CLI 和 Web 下相对路径行为不一致) - 老项目没命名空间?别硬套 PSR-4;改用
"classmap": ["lib/", "includes/"],然后跑一次composer dump-autoload
Loading composer repositories 是常态,不是你网络坏了——换镜像源才是唯一解,且必须全局配:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。其他操作都只是浪费时间。










