精简 composer 依赖的核心是通过插件干预安装阶段,而非事后删除;使用 vaimo/composer-cleaner 在 post-install-cmd 阶段按配置路径(如 /translations/、/src/monolog/translator/)自动 unlink 中文语言文件,不破坏 autoload,且需配合 --no-dev 确保 dev 包资源不被安装。

精简 Composer 安装后的依赖,核心不是“删完再装”,而是控制安装阶段的输入和输出——中文语言包这类资源文件,composer install 本身不会主动剔除,必须靠插件或配置干预。
用 composer-cleaner 插件自动 unlink 中文翻译目录
它在 post-install-cmd 阶段扫描 vendor/,对匹配路径执行 unlink(),不改 autoload、不破坏类加载。
- 先装插件:
composer require --dev symfony/translation(非必需,但 cleaner 依赖它)+composer require --dev vaimo/composer-cleaner - 在
composer.json的extra段加规则,比如删所有/translations/和/locale/:"extra": { "cleaner": { "exclude": ["/translations/", "/locale/", "/lang/", "/Translations/"] } } - 注意:插件只删文件,不删目录结构;
/src/Monolog/Translator/这类非标准路径不会被命中,得手动加进exclude - 执行
composer update --lock再composer install,插件才会触发
按包名精细控制语言包剔除
不同包存放翻译的位置差异很大,硬删 /translations/ 会漏掉或误删。必须查清每个目标包的实际路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
monolog/monolog的翻译在src/Monolog/Translator/,不是translations/ -
doctrine/dbal把翻译放在lib/Doctrine/DBAL/Tools/Console/Helper/里 - 查法:进
vendor/vendor-name/package-name目录,find . -name "*.php" | grep -i trans或看包的composer.json里autoload或extra字段 - 插件配置要写绝对路径片段,比如加
"/src/Monolog/Translator/"到exclude数组
避免用 conflict/replace 处理语言包
语言包是资源文件,不是运行时依赖,conflict 和 replace 对它无效——它们只作用于包级别的安装决策,不干预包内文件。
-
conflict是阻止某个包被解析进composer.lock,但symfony/translation本身是运行必需的,不能冲突 -
replace告诉 Composer “这个包我自有实现”,但你没法 replace 一个翻译目录 - 试图用
replace覆盖symfony/translation会导致 autoload 映射错乱,甚至让整个翻译系统失效
生产环境必须加 --no-dev,否则 dev 包带的语言资源白删
--no-dev 是唯一能彻底跳过 require-dev 区块的方式,而很多测试工具(如 phpunit/phpunit)自带大量本地化字符串。
-
composer install --no-dev不会下载、不写入vendor/、不生成对应 autoload 映射 - 常见错误:只删
composer.json里的require-dev再跑install——composer.lock还存着旧记录,照样装 - CI 脚本必须用
install --no-dev,不是update --no-dev:后者仍会重算依赖图,可能意外拉进新 dev 包
真正难的不是删文件,是确认哪些翻译路径属于“可删”——有些包把中文翻译和核心逻辑混在同一目录,删错就报 Class not found;插件的 exclude 规则得一条条验证,不能靠猜。










