composer install 无法跳过下载或解压特定文件,archive.exclude 仅在包作者构建 dist 包时生效,不影响本地安装;删 vendor 中测试目录需用 post-install-cmd 脚本清理,exclude-from-classmap 仅排除自动加载不删除文件。

Composer install 命令本身无法在下载或解压时跳过特定文件(如 tests/、docs/、.git/),你看到的 vendor 里残留的测试目录,不是它“没排除”,而是它根本没这个能力。
为什么 archive.exclude 对你项目里的 composer install 没用
这个字段只在包作者执行 composer archive 或 Packagist 自动构建 dist 包时生效,控制的是「最终发布的 ZIP 里不包含哪些路径」。它:
• 不作用于你本地的 composer install 或 composer update
• 不能写在你自己项目的 composer.json 里去影响第三方依赖
• 路径必须以 / 开头(如 "/tests/"),不支持 ** 或正则
• 改完后必须打新 tag(如 v2.1.0)才可能被下游用户用上
想删 vendor 里某个包的 tests/?用 post-install-cmd 清理最实际
这是唯一能立刻见效、无需等包作者更新的方式,尤其适合部署环境精简体积:
• 在项目根目录的 composer.json 的 "scripts" 下添加:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"post-install-cmd": [<br> "rm -rf vendor/monolog/monolog/tests",<br> "rm -rf vendor/monolog/monolog/examples"<br>]
• Windows 用户建议统一用 PHP 脚本,避免
del /s /q 权限失败或路径含空格问题• 多个包要清理?别堆多条命令,合并成一个
php scripts/clean-vendor.php 更可靠• 注意:某些 CI 环境或容器里
vendor/ 是只读的,rm -rf 可能静默失败
exclude-from-classmap 不是删文件,只是不进自动加载表
如果你的目标是“不让测试类被自动加载”,而不是“删掉测试文件”,这个字段才适用:
• 必须写在 autoload 或 autoload-dev 块内,例如:
"autoload": {<br> "psr-4": {"App\": "src/"},<br> "exclude-from-classmap": ["/tests/", "/benchmarks/"]<br>}
• 它不影响 PSR-4 加载逻辑——只要类在
src/ 下且命名空间匹配,照样能 new 出来• 修改后必须运行
composer dump-autoload -o 才生效• 常见误判:排除了
tests/ 却发现类还能加载,大概率是因为它同时被 autoload-dev.files 或其他 PSR-4 映射兜底了
真正决定文件是否出现在 vendor/ 的,只有两个源头:包作者是否在发布时用 .gitattributes 或 archive.exclude 控制了 dist 包内容;或者你是否在安装后主动清理。没有第三条路——别再指望 composer install --exclude 这种不存在的参数了。










