必须提交composer.lock文件——它是PHP应用项目依赖一致性的强制契约,确保开发、测试、生产环境安装完全相同的依赖版本;被.gitignore拦截、未同步提交或CI误用composer update均会导致环境不一致故障。

composer.lock 必须提交,且每次部署前强制校验
开发机和服务器依赖不一致,90% 的根源是 composer.lock 没提交、被忽略、或 CI 跑了 composer update 却没提交新 lock。它不是“辅助文件”,而是唯一能保证两端安装完全相同包树的契约。
- 所有 Git 仓库必须把
composer.lock加入版本控制,禁止在.gitignore中屏蔽 - CI 脚本开头加
git checkout -- composer.lock,防止本地误改未提交导致线上拉取旧 lock - 部署后立刻执行
composer show monolog/monolog,输出版本号必须和composer.lock里"version"字段一字不差(含小版本) - 若用 Docker 构建,
COPY composer.lock .必须在COPY composer.json .之后、composer install之前,顺序错就失效
config.platform 写错位置或格式 = 白写
config.platform 是让开发机模拟服务器 PHP 环境的关键开关,但写在 extra 或用 ^8.1 这种范围写法,它就完全不生效——Composer 解析时直接跳过。
- 必须放在
composer.json根级config对象下,例如:"config": {"platform": {"php": "8.1.10"}} - PHP 版本必须写死完整小版本号(如
"8.1.10"),不能写"8.1"或"^8.1" - 改完
config.platform后,必须删掉vendor/和旧composer.lock,再跑composer install,否则旧 lock 仍按原平台解析 - 验证是否生效:运行
composer show --platform,输出里php行应显示你指定的版本,而非本地实际 PHP 版本
镜像源混用导致元数据不一致
混合云场景(比如开发在阿里云 VPC、CI 在 AWS)下,不同镜像节点同步延迟不同,同一时刻查到的可用版本可能不一致——这不是 Composer 错,是索引文件(如 provider-*.json)还没拉齐。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目级
repositories配置会完全屏蔽全局镜像,所以不要在composer.json里留空"repositories": [],要么删掉,要么填真实地址 - CI 脚本开头加
composer config --global --unset repos.packagist,防止全局镜像覆盖项目配置 - 验证镜像是否同步:用
curl -I https://mirrors.aliyun.com/composer/p2/guzzlehttp/guzzle/7.9.0.json对比官网地址,HTTP 200 vs 404 即可确认 - URL 必须以
/结尾,https://mirrors.cloud.tencent.com/composer会拼成/composerpackages.json→ 404
post-install-cmd 调用前端工具时路径和执行环境错位
全栈项目里,composer install 后自动跑 yarn build 失败,往往不是脚本写错,而是命令默认在项目根目录执行,而 yarn 实际只在 frontend/ 目录下才有效。
- 别写
cd frontend && yarn build——&&在 Windowscmd.exe下不生效;改用封装脚本bash scripts/build-frontend.sh,开头加#!/usr/bin/env bash - 调用
yarn优先用./frontend/node_modules/.bin/yarn,避免依赖全局安装,CI 环境常没装全局yarn - CI 必须先
npm install -g corepack,再corepack enable,否则yarn版本和.yarnrc.yml不一致 -
post-install-cmd执行失败不会中断composer install,要加|| exit 1强制失败退出,否则你以为构建成功了
实际对齐最难的点不在命令本身,而在「谁有权限改 lock」和「谁决定 platform 版本」——这两个必须由架构组统一发布,不能由开发者各自 push。否则开发机和服务器永远在不同时间点解析出不同结果。

















