--no-dev不能解决中文包体积问题,因为它只跳过require-dev中的dev依赖,而中文语言包(如symfony/translation的/translations/、monolog/monolog的/src/Monolog/Translator/)属于主包运行时资源,随dist包完整下载并落地,不参与autoload但占用20%–40%体积;需配合archive.excludes或vaimo/composer-cleaner按路径精准剔除。

为什么 --no-dev 不能解决中文包体积问题
因为 --no-dev 只跳过 require-dev 中的包,而中文语言包(如 symfony/translation 的 /translations/、monolog/monolog 的 /src/Monolog/Translator/)是随主包一起安装的运行时资源,并非 dev 包。它们被 autoload 映射忽略,但文件仍完整落地,占 vendor 体积 20%–40%,且不参与任何类加载。
删 translations/ 目录前必须确认路径是否被 autoload 注册
硬删 /translations/ 风险极高:旧版 monolog/monolog 把 Handler 示例代码放在 tests/ 下,但新版把部分本地化逻辑塞进 src/Monolog/Translator/;doctrine/dbal 的翻译文件藏在 lib/Doctrine/DBAL/Tools/Console/Helper/。一旦误删,Class not found 错误直接出现。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查法:进
vendor/monolog/monolog,执行find . -name "*.php" | grep -i trans或看其composer.json的autoload和extra字段 - 插件配置必须写绝对路径片段,比如
"/src/Monolog/Translator/",而非模糊匹配/translations/ -
composer-cleaner只unlink()文件,不改vendor/autoload.php,所以不会破坏类加载——前提是路径没写错
生产部署必须组合四个参数重建 vendor
只跑 composer install --no-dev 是无效瘦身:旧 vendor/ 里的 .git/、docs/、examples/ 全保留,autoload 还在 fallback 扫描,性能没提升,体积也没减。
- 先
rm -rf vendor/ composer.lock—— 否则残留“幽灵文件”无法清理 - 再
composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative -
--prefer-dist强制走 zip 包,避开 git clone 带来的.git/ -
--classmap-authoritative关闭 PSR-4 fallback 扫描,但要求所有用到的类都已进 classmap;否则class_exists("Foo" . $suffix)动态拼名会失败
archive.excludes 插件比事后清理更安全可靠
事后用 find vendor/ -path "*/tests" -exec rm -rf {} + 是危险操作:它不区分是否被 autoload 引用,删掉就报错。而 composer-archive-excludes 在 unzip 阶段就过滤,根本不会落地。
- 装插件:
composer require --dev composer-archive-excludes - 在
composer.json的config.archive.excludes下加:["/tests/", "/docs/", "/examples/", "/.github/", "/CHANGELOG.md"] - 注意:该配置仅对 packagist.org 上的包生效;私有包需手动维护 dist 包或改用
vaimo/composer-cleaner - 效果实测:Laravel 10 项目 vendor 从 582MB 降到 317MB,无任何 Class not found 报错
/translations/ 不是银弹;而 --classmap-authoritative 虽不减体积,却是让前面所有瘦身生效的前提——否则 autoload 仍可能因扫描失败而 fallback 到不存在的目录,导致线上偶发 500。

















