华为云/阿里云镜像配置必须带末尾斜杠,否则静默回退官方源;正确命令为composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/composer/或https://mirrors.aliyun.com/composer/,缺斜杠、漏-g、键名错误或type缺失均导致失效,需用composer config -g repo.packagist验证输出json。

华为云/阿里云镜像配置必须带末尾斜杠才能生效
镜像 URL 写错一个字符,composer install 就会退回到官方源下载——不是报错,而是静默降级,导致你根本意识不到 tests/、docs/ 还在悄悄膨胀 vendor。必须用 composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/composer/(注意结尾的 /),缺了它,部分 Composer 版本直接 404;换成 http:// 会被 secure-http 拦截。
验证是否真生效:composer config -g repo.packagist 输出必须是完整 JSON,比如 {"type":"composer","url":"https://mirrors.huaweicloud.com/repository/php/composer/"}。如果返回空或报错,说明没写进去,重跑命令前先确认拼写、-g 参数、URL 协议和结尾斜杠三者全对。
archive.excludes 是唯一能真正删掉包内 tests/ 的方式
手动 rm -rf vendor/*/tests 极大概率引发 Class not found 错误——有些包(如 monolog/monolog)把 StreamHandler 示例代码放在 tests/ 下,且 autoload 映射里写了该路径。暴力删目录等于破坏类加载契约。
- 先装插件:
composer require --dev composer-archive-excludes - 在
composer.json的config块里加:"archive": { "excludes": ["/tests/", "/docs/", "/examples/", "/.github/", "/CHANGELOG.md"] } - 之后每次
composer install --no-dev --prefer-dist,匹配路径在解压阶段就被跳过,根本不会落地
这个配置只对从 Packagist 下载的 zip 包生效,而国内镜像(华为云、阿里云)默认提供的是 dist 包,正好匹配。
--no-dev --prefer-dist --remove-vcs 必须组合使用且重装 vendor
--no-dev 只跳过顶层 require-dev 声明的包,拦不住传递依赖(比如 laravel/framework → symfony/var-dumper → phpunit/php-code-coverage)。所以光加参数不够,得配合 archive.excludes 源头过滤。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行前必须先
rm -rf vendor:已有文件不会被覆盖,裁剪不生效 -
--prefer-dist强制走 zip 包,比 git clone 少掉 .git 目录和大量历史记录 -
--remove-vcs是兜底项,删掉某些不规范 dist 包里残留的.git目录
单独用 --no-dev 后 vendor 还有几百 MB?八成是没清掉 vendor/symfony/symfony 或 vendor/laravel/framework 里的 docs/ 和 build/ 目录——它们体积常超 20MB,但不在顶层 vendor/* 里,要用 du -sh vendor/*/vendor/* 2>/dev/null | sort -hr 才能揪出来。
--classmap-authoritative 让瘦身真正起效
前面所有操作只是“删文件”,但如果 autoload 还开着 fallback 扫描机制,PHP 仍会遍历整个 vendor/ 目录找类——哪怕 tests/ 已被删,扫描失败也可能导致加载异常,尤其在容器或 NFS 环境下。
- 确保
composer.json中已设"optimize-autoloader": true - 运行
composer dump-autoload --optimize --classmap-authoritative --no-dev - 后续部署命令统一加
--optimize-autoloader --classmap-authoritative
这时 autoloader 只认 vendor/composer/autoload_classmap.php,连 vendor/autoload.php 里那层 PSR-4 fallback 都关掉了。省下的不只是磁盘空间,更是运行时 I/O 和内存开销。
真正容易被忽略的是锁文件污染:如果 composer.lock 里还残留着 require-dev 的包记录,哪怕你本地 install 时加了 --no-dev,CI 流水线拉取 lock 文件后仍可能误判依赖边界。所以优化前,先跑一次 composer update --no-dev -o 清洗 lock 文件。










