Composer 没有根级 exclude-from-classmap 配置项;有效配置必须置于 autoload 或 autoload-dev 的 classmap 子结构中,且仅对 classmap 类型生效,需配合 dump-autoload 重新生成映射。
直接说结论:Composer 没有 exclude-from-classmap 这个配置项,这是常见误解;真正控制类自动加载排除行为的是 classmap 的生成逻辑和 autoload.exclude-from-classmap(注意是 autoload. 前缀)——但仅对 classmap 类型生效,且必须在 composer.json 的 autoload 或 autoload-dev 下声明。
为什么 exclude-from-classmap 不写在根级?
这个配置不是全局开关,而是 classmap 自动加载策略的子选项。如果你没定义 "classmap": ["src/"],那 exclude-from-classmap 就完全不生效——Composer 会直接忽略它。
-
composer.json根级的exclude-from-classmap是无效的,不会报错但也不会起作用 - 它只在
"autoload": { "classmap": [...], "exclude-from-classmap": [...] }结构中被识别 - 排除路径是相对于
composer.json所在目录的,支持通配符*(如"tests/*"),但不支持**
实际怎么配置才有效?
典型场景:你用 classmap 加载 src/,但想跳过其中的 src/Tests/ 和 src/Examples/ 目录(避免测试类或示例类被误加载)。
{
"autoload": {
"classmap": ["src/"],
"exclude-from-classmap": [
"src/Tests/",
"src/Examples/",
"src/Deprecated/"
]
}
}
执行 composer dump-autoload 后,vendor/composer/autoload_classmap.php 中将不再包含这些路径下的类文件映射。