composer无vendor排除规则,所谓“排除”实为跳过安装、autoload或打包三类操作;阻止安装只能删require项,“replace”需自行提供类;exclude-from-classmap对vendor无效;archive.excludes仅影响打包且需插件支持。

Composer 没有 vendor 排除规则,所谓“排除 vendor 下的某个包或目录”,本质是三类互不重叠的操作:跳过安装、跳过 autoload、跳过打包。混用会导致 Class not found、CI 失败或体积失控。
怎么让某个包压根不进 vendor/
只要它出现在 require 或 require-dev 里,Composer 就一定会下载解压——不存在“忽略安装”开关。
- 真正能阻止安装的,只有把它从
require中彻底删除;若只是临时不用,挪到require-dev并配composer install --no-dev -
--ignore=vendor/package只影响composer update的更新行为,不阻止安装;且低版本 Composer 不支持该参数 - 想长期禁用某包又不让它消失在依赖图里?用
"replace": {"vendor/package": "*"},但你得自己提供全部类,否则运行时报Class not found
怎么让 vendor/*/tests/ 不被自动加载
exclude-from-classmap 对 vendor 目录完全无效——它只作用于你项目自身配置的 classmap 路径(如 "classmap": ["src/"]),不影响 PSR-4,更不扫描 vendor。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- vendor 包内部的
tests/是否被加载,取决于该包自己的autoload配置;你无法从根项目控制 - 如果你发现
vendor/monolog/monolog/tests/里的类被 autoload 扫到了,说明它用了files或classmap注册了测试文件——这是包作者的问题 - 唯一安全干预方式:用
composer-archive-excludes插件,在install解压阶段就跳过这些路径(需包作者没把 tests/ 打进 dist zip 才有效)
怎么让 vendor/*/docs/ 不进部署包
archive.excludes 是唯一正经起作用的“排除”配置,但它只影响 composer archive 和插件触发的打包行为,跟 install、autoload、update 全无关系。
- 配置示例:
"archive": { "excludes": ["/tests/", "/docs/", "/examples/", "/.github/"] } - 必须配合插件使用:
composer require --dev composer-archive-excludes,否则该字段被完全忽略 - 路径是相对于项目根目录的,不是 vendor;它不会删已存在的 vendor 内容,只控制新解压时哪些路径不落地
最容易被忽略的一点:所有“排除 vendor 子目录”的尝试,都默认假设你有权限改包源码或说服作者加 archive.excludes。现实中,90% 的精简需求靠 --no-dev --prefer-dist --remove-vcs --classmap-authoritative 四连招就能解决,别在排除逻辑上过度设计。










