备份 composer.lock 必须连带锁定 php 平台版本,仅拷贝文件本身无效;其 platform 字段(如 "php": "8.2.10")是隐式前提,php 版本不匹配时 install 直接报错退出,而非降级兼容。

备份 composer.lock 时必须连带锁定 PHP 平台版本
只拷 composer.lock 文件本身毫无意义——它里面记录的 platform 段(如 "php": "8.2.10")是依赖解析的隐式前提。若目标环境 PHP 版本不匹配,composer install 会直接报错退出,而不是降级兼容。
实操建议:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确认
composer.json中已声明"config": {"platform": {"php": "8.2.10"}},否则composer.lock可能漏掉平台约束 - 用
git add composer.json composer.lock提交,确保两者版本对齐;git status显示 clean 才算真正可回滚 - 离线备份时,额外记录当前
php -v输出和php -m | grep -E "(mbstring|xml|zip|openssl)"结果,避免还原时 PHP 扩展缺失
镜像源元数据缓存必须手动清理,不能只靠 composer clear-cache
composer clear-cache 只清 vendor 包缓存(~/.composer/cache/files/),但镜像源的 packages.json 元数据缓存在 ~/.composer/cache/repo/ 下,路径与 URL 强绑定。不清它,换源后仍按旧索引解析依赖,导致 composer update 找不到新包、composer require 报 Package not found。
实操建议:
- 查当前生效镜像:运行
composer config repo.packagist(不加-g),确认输出是否为预期 URL - 定位缓存目录:对阿里云镜像,执行
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer;对腾讯云,对应路径为https---mirrors.cloud.tencent.com-composer - 验证是否清空:
ls -la ~/.composer/cache/repo/应无非空子目录;更彻底可临时改缓存路径:composer config -g cache-dir /tmp/composer-cache-empty
回滚到官方源要同时处理三层配置
Composer 查源顺序是:环境变量 > 项目级 composer.json 中的 repositories > 全局配置。只改全局配置,项目里有自定义 repositories 就会被覆盖,回滚无效。
实操建议:
- 先清除环境变量:
unset COMPOSER_REPO_PACKAGIST(Linux/macOS)或$env:COMPOSER_REPO_PACKAGIST=""(PowerShell) - 删项目级镜像配置:打开
composer.json,删除整个"repositories": [...]块;或临时覆盖:composer config --unset repositories - 写死全局源:
composer config -g repo.packagist composer https://packagist.org(注意:键名是单数repo.packagist,composer是 type 值,URL 必须带https://) - 验证真实请求:
composer require monolog/monolog --no-install -vvv,日志中Downloading https://repo.packagist.org/packages.json才算成功
离线还原时 --no-plugins --no-scripts --no-autoloader 缺一不可
离线环境下,composer install 默认仍会触发插件(如 hirak/prestissimo)、脚本(post-install-cmd)和 autoloader 生成。其中任何一项联网或路径错误,都会中断流程。
实操建议:
- 强制断网验证:往
/etc/hosts加127.0.0.1 packagist.org,再跑composer install -v,看到Connection refused才算真正隔离 - 三步原子执行:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloadercomposer dump-autoload -ophp -r "require 'vendor/autoload.php'; echo 'OK';" - 打包前剔除危险文件:
zip -r app-offline.zip . -x "vendor/bin/*" "vendor/composer/installed.json",避免软链接和绝对路径污染
composer.lock + PHP 环境 + 安装参数三者在还原时完全对齐。任何一层错位,都会在 autoload 阶段或运行时暴露,且错误信息往往不指向根源。










