composer install 是多机同步唯一可靠入口,必须严格使用且配合已提交的 composer.lock;禁止在部署中使用 composer update;需配置 config.platform 精确控制 php 小版本;镜像源仅加速不控版本;离线环境须打包 vendor/ 和 lock 文件。

composer install 是多机同步的唯一可靠入口
多台机器装出不同依赖,根本不是镜像源或网络问题,而是有人在某台机器上误用了 composer update,又没提交新 composer.lock。只要所有机器都严格执行 composer install(且 composer.lock 已提交),结果就必然一致——Composer 不会“猜”,它只还原快照。
- CI/CD 脚本、Dockerfile、Ansible 任务里,必须写
composer install --no-dev --optimize-autoloader --no-interaction,缺一不可 - 看到
composer update出现在部署流程中,立刻删掉;它和--no-dev无关,本质仍是重算依赖树 - 运行
composer install --dry-run,输出含Installing dependencies from lock file才表示 lock 有效;若出现Resolving dependencies...,说明composer.json和composer.lock已脱钩,需人工干预
config.platform 必须写死小版本号,否则形同虚设
config.platform 是控制跨机器一致性最关键的开关,但写错位置或格式就完全失效。它不解决“装什么”,而是约束“能装什么”——比如团队统一用 PHP 8.1.10,那即使某台机器装了 8.2,composer install 也会按 8.1.10 的兼容性去选包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须放在
composer.json根级config对象下,键名严格为platform,不能是platform.php或嵌套在extra里 - 值必须是对象,且版本号精确到小版本:写
"php": "8.1.10"有效;写"^8.1"、"8.1"或"8.1.0"(末尾缺零)都会被忽略 - 改完后必须删掉旧
vendor/和composer.lock,再跑composer install—— 否则旧 lock 仍按原平台解析,不会自动刷新 - 验证是否生效:运行
composer show php,输出应为version : 8.1.10;再看composer install --dry-run日志里是否有Platform configuration: php 8.1.10
镜像源只是加速器,不是版本控制器
换阿里云镜像不会让 monolog/monolog 从 2.9.1 变成 3.0.0,也不会修复因 PHP 版本不一致导致的 lock 解析差异。镜像只缓存 packagist.org 的内容,不参与版本求解。
- 项目级镜像配置必须显式写进
composer.json的repositories,例如:"repositories": { "packagist.org": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" } } - 所有人必须清掉全局镜像设置:
composer config --global --unset repos.packagist;检查残留用composer config --global repo.packagist,输出应为空或https://packagist.org - CI 脚本开头加一句
composer config --global --unset repos.packagist,防止构建节点被历史配置污染 - 镜像再快,如果
composer.lock里记录的是基于 PHP 8.2 解出的依赖,而某台机器是 PHP 8.1,composer install就会失败或跳过某些包
离线环境同步必须打包 vendor/ + lock,不能只传 lock
空气间隙(air-gapped)系统无法联网,所以关键不是“怎么装”,而是“怎么让每台机器在无网时也能还原完全一致的依赖”。仅靠 composer.lock 不够——Composer 离线安装时仍会尝试访问网络获取包 zip/tar。
- 有网机器上对每个项目执行
composer update --with-all-dependencies,确保composer.lock中每个dist条目都有url和shasum - 把整个
vendor/目录 +composer.lock打包进离线介质;不要只传 .zip 包,除非你已配置 artifact 仓库(且该配置只对顶层包生效,对递归依赖无效) - 打包前运行
composer install --no-dev --optimize-autoloader,减少体积并排除 dev-only 包 - 目标机若 PHP 版本或扩展缺失(如缺
ext-redis),可用composer install --ignore-platform-reqs绕过平台检查,但这只是临时手段,长期应统一基础环境
vendor/ 再跑 composer install,以及是否真把 composer.lock 提交到了 Git —— 这两个动作漏掉任何一个,集群同步就只剩表面一致。










