必须用 composer install;它读取 composer.lock 安装确切版本,确保环境一致;composer update 忽略 lock 重算依赖,仅限本地主动升级,混用将导致依赖漂移。

新项目拉代码、CI/CD 构建、线上部署,必须用 composer install;本地加包、升小版本、调兼容性,才该用 composer update。混用是绝大多数依赖漂移和环境不一致的根源。
composer install 和 composer update 到底该用哪个
这不是操作习惯问题,是语义边界问题。
-
composer install只读composer.lock,装里面记录的**确切版本号**,比如"monolog/monolog": "2.10.0"—— CI 脚本里出现它,才是可复现构建的底线 -
composer update忽略composer.lock,按composer.json重算整个依赖树,会改锁文件 —— 它本质是一次“主动决策”,不是“自动同步” - 首次运行
composer install时若无composer.lock,它会自动 fallback 到update并生成锁文件,等于悄悄绕过团队共识;建议提前git commit一个空锁文件,或由负责人统一生成 - 线上脚本里一旦出现
composer update,就等于把版本控制权交给了网络延迟、Packagist 状态、甚至某包作者刚发的 breaking change
加依赖必须用 composer require,但参数不能错
手写 composer.json 再 install 是反模式,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区,上线也会被加载 - 指定版本别只写
7.5,得带约束符:composer require guzzlehttp/guzzle:^7.5(推荐)或~7.5.0;写成7.5会被解释为严格等于7.5.0,基本匹配不到 - 只想加进
composer.json但暂不安装?加--no-update,比如composer require symfony/console --no-update,之后再单独update某个包更可控 - 遇到
Your requirements could not be resolved且确认是 PHP 版本/扩展限制(比如本地 PHP 8.3 但包只支持 8.2),可临时加--ignore-platform-reqs强行装——但别提交,CI 里禁用
autoload 不生效?先 dump,别急着查命名空间
Class not found 报错,90% 不是路径或命名空间写错,而是 autoloader 没刷新。
- Composer 不实时监听文件增删:新增 PSR-4 目录、改了
autoload配置、甚至改了files类型的全局函数文件,都必须手动跑composer dump-autoload - 开发中频繁加类又不想每次
update,加-o生成 classmap:composer dump-autoload -o,比默认 PSR-4 查找快不少 - 生产环境进一步提速?用
--classmap-authoritative:composer dump-autoload --optimize --classmap-authoritative,让 Composer 不再扫描 PSR-4 目录,直接查表
本地包改完不生效?path 仓库 + symlink 才是正解
默认安装是 dist/source 复制体,你改本地代码根本不会触发 reload —— 必须用 path 类型仓库建立符号链接。
- 在项目
composer.json的repositories里加:{"type": "path", "url": "../my-local-package"} -
require时版本必须匹配本地包的composer.json中version字段,比如"dev-main"或"1.0.x-dev" - 运行
composer update vendor/my-local-package(不是install),才能重建软链 - 验证是否成功:
readlink vendor/vendor/my-local-package输出应为你的开发路径;为空说明没链上 - IDE 跳转不到源码?PHPStorm 需把
vendor/...标为 Excluded,把本地路径标为 Sources;VS Code 要关掉intelephense.environment.followSymbolicLinks(新版默认开,反而混乱)
最常被忽略的点是:composer.lock 不是“缓存”,是契约;vendor/autoload.php 不是“一个文件”,是整个加载系统的唯一入口;而 path 仓库的 url 值,哪怕多一个 . 或少一个 /,都会导致 symlink 失败却无报错。

















