切换国内镜像本身不会改变vendor体积,真正原因是换源后执行composer update或未清缓存导致dist包重新下载,而不同镜像源对dist包的打包策略(如是否保留.git、tests/)不一致。

切换国内镜像本身不会导致 vendor 目录体积变动,体积变化的真正原因是:你换源后执行了 composer update 或没清缓存,触发了 dist 包重新下载 + 解压逻辑变更,而不同镜像源对 dist 包的打包策略(如是否保留 .git、tests/)不一致。
镜像源只改下载路径,不改包内容或结构
packagist.org 和阿里云/腾讯云镜像源提供的同一个包(比如 monolog/monolog v2.13.0)理论上应完全一致——但实际中,部分镜像源在同步时会做二次处理:
- 某些镜像用
tar --no-same-permissions解压,导致权限位丢失(不影响体积,但影响执行) - 个别镜像为兼容旧工具链,会主动剔除
.git、CHANGELOG.md等文件(--remove-vcs效果提前生效) - 极少数镜像未严格校验 dist 包 hash,拉取了非官方构建的 zip(如社区维护的 slim 版本)
这些差异只有在你「重装」vendor 时才会暴露。单纯换源 + composer install 不会改变已有 vendor 的体积。
为什么换源后 composer update 容易让 vendor 变大或变小
composer update 会忽略 composer.lock 中记录的原始 dist URL,转而向新镜像源请求最新可用版本信息——这可能导致:
- 拉取到同一版本但不同构建的 dist 包(例如原包含
docs/,镜像版已剔除) - 意外升级子依赖(如
symfony/console从 v5.4 升到 v6.0),新版本默认不含Tests/目录 - 某些包在新镜像中 fallback 到 source 模式(Git clone),反而带入
.git/,体积暴增
验证方式:ls -la vendor/monolog/monolog/ 对比前后是否有 .git 或 tests/;再查 composer show monolog/monolog 看 dist URL 是否变了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
真正可控的瘦身动作必须显式声明
靠换镜像“自动瘦身”是错觉。要稳定控制 vendor 体积,必须在安装时强制指定行为:
- 删 dev 包:
--no-dev - 强制走 dist:
--prefer-dist(避免 git clone 带入 .git) - 删 VCS 元数据:
--remove-vcs(兜底清理镜像可能漏掉的 .git) - 跳过冗余文件:
"archive": {"excludes": ["/tests/", "/docs/"]}(需插件支持)
执行前先 rm -rf vendor && composer clear-cache,再跑 composer install --no-dev --prefer-dist --remove-vcs。否则残留的旧文件和 autoload 映射会让“瘦身”失效。
最容易被忽略的体积隐藏点:autoload classmap 未重建
即使你删掉了 vendor/monolog/monolog/tests/,只要没运行 composer dump-autoload --classmap-authoritative -o,autoloader 仍会尝试扫描整个目录——它不读文件大小,但会让 PHP 在 scandir() 时加载大量无效 inode,表现为内存占用高、部署包解压后实际磁盘占用没降。
这个步骤必须和安装参数联动:单独 dump-autoload 不会删文件,但缺它,前面所有瘦身操作都算“半残”。

















