必须用 composer install,且不能删 composer.lock——否则环境就不可能一致;它不解析依赖树,只按 lock 文件中记录的精确版本、哈希值和嵌套依赖关系安装,确保 vendor 字节级一致,是团队协作、ci/cd 和生产部署唯一可靠的选择。

必须用 composer install,且不能删 composer.lock —— 否则环境就不可能一致。
为什么 composer install 是唯一可靠的选择
它不解析依赖树,只按 composer.lock 里记录的每个包的精确版本、哈希值、嵌套依赖关系来安装。哪怕你本地 PHP 版本和队友不同,只要 lock 文件没变,composer install 装出来的 vendor/ 就是字节级一致的。
常见错误现象:composer update 后提交了新 composer.lock,但没同步给队友;队友仍用旧 lock 文件执行 composer install,结果装出两套不兼容的依赖树。
- 团队协作中,
composer install是部署动作,不是开发动作 - CI/CD 流水线、Docker 构建、线上发布,必须禁用
composer update - 本地开发时误删
vendor/?直接composer install恢复,别碰update
composer install 卡在 “Loading composer repositories” 怎么办
这不是命令写错了,是默认连 packagist.org 超时或被拦截。国内访问不稳定,尤其在 CI 环境或某些企业网络下更明显。
正确做法是统一配置镜像源,而不是改项目里的 composer.json:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局设置阿里云镜像:
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ - 若已设过旧镜像(如已停用的 phpcomposer.com),先清掉:
composer config -g --unset repos.packagist - Docker 构建时建议加
--no-cache参数,避免缓存污染导致行为异常
生产与开发环境要严格区分:必须加 --no-dev
composer install 默认会装 require-dev 下的所有包,比如 phpunit、laravel/pint、symfony/var-dumper。这些在生产环境不仅无用,还可能引发安全泄露或 autoload 冲突。
关键点:composer.lock 里其实也存着 dev 包的版本记录,--no-dev 只跳过安装,不跳过解析——所以 lock 文件本身得干净。
- 推荐完整命令:
composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction -
--optimize-autoloader和--classmap-authoritative显著提升运行时性能,尤其对 PSR-4 自动加载 - 如果构建机缺扩展(如
ext-gd),临时用--ignore-platform-reqs,但正式镜像必须提前装好对应扩展
复制项目或换环境后 composer install 报错怎么办
典型报错:Your requirements could not be resolved 或 Package not found。根本原因不是 composer.json 写错了,而是 composer.lock 与当前环境(PHP 版本、已启用扩展、平台约束)不匹配。
别急着删 lock 文件——那是协作契约。优先尝试修复:
- 检查 PHP 版本是否符合 lock 文件中各包的
php约束,例如某包声明"php": "^8.0",而你本地是 PHP 7.4 - 运行
composer update --lock:只重算 lock 文件,不下载包,能修正因 PHP 升级导致的解析失败 - 确认
composer.json中的platform配置是否合理,比如"config": {"platform": {"php": "8.1.0"}}可强制模拟目标环境
最常被忽略的一点:lock 文件里记录的不只是主依赖,还有所有嵌套依赖的精确哈希。哪怕只是换了 Composer 版本(如从 2.2 升到 2.5),lock 文件格式也可能微变,导致解析失败——所以团队最好约定 Composer 小版本号。










