Composer不支持exclude字段,所谓“排除”实为不声明即不加载;files类型无过滤机制,需手动移除;PSR-4通过路径映射控制范围;--no-dev可排除autoload-dev内容;修改后须运行dump-autoload生效。
composer
.json 里没有 exclude 字段,别白费劲找
Composer 本身不支持在
或
中直接写
或类似配置来“排除”文件。这是常见误解——很多人搜 “composer exclude file”,结果卡在无效配置上。Composer 的自动加载机制是“声明式”的:你只告诉它哪些路径/命名空间要加载,没列的默认就不加载。所谓“排除”,其实是靠不包含它来实现的。
用
自动加载时,没法排除单个文件
如果你用的是
类型(比如加载全局函数),那 Composer 会原样 require 所有列出的文件,没有任何过滤机制。想跳过其中某个,唯一办法是:别把它写进
数组里。
错误做法:
,然后幻想加个
—— 这字段根本不存在,会被忽略
正确做法:只写需要的,
如果
是历史遗留且不能删,又怕被误 require,建议改后缀(如
)或移出
路径
PSR-4 加载下,“排除”本质是调整目录结构或命名空间映射
PSR-4 是主流方式,它的“排除”逻辑藏在路径映射里。比如你想让
下所有类都加载,但不想加载
里的类(尽管它们是 PHP 文件)——那就不该把
映射进 autoload,而应单独放进
或干脆不映射。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
危险配置:
→ 会加载
,哪怕它不该在生产环境出现
安全做法:把测试代码挪到
目录,并在
中映射:
如果必须保留在
里,就拆开映射:
+
,然后确保生产环境不加载
运行时动态排除?用
控制范围
真正起作用的“排除”发生在生成自动加载文件阶段,而不是配置里。比如你把某些类放在
,它们就不会出现在生产环境的
里。
开发环境:
→ 包含
和
生产环境:
→ 只处理
,
内容全被跳过
注意:
不影响
的包安装,只影响自动加载规则生成
最易被忽略的一点:修改了
配置后,必须重新运行
(或
/
),否则变更完全不生效。很多人改完
就以为搞定了,结果类还是找不到或不该加载的加载了。
autoloadautoload-dev"exclude"files"files"files"files": ["src/helpers.php", "src/deprecated.php"]"exclude": ["deprecated.php"]"files": ["src/helpers.php"]deprecated.phpdeprecated.php.disabledfilessrc/src/Tests/Testsautoload-dev"App\": "src/"src/Tests/ExampleTest.phptests/autoload-dev"App\Tests\": "tests/"src/"App\": "src/""App\Tests\": "src/Tests/"autoload-devcomposer dump-autoload --no-devautoload-devvendor/autoload.phpcomposer dump-autoloadautoloadautoload-devcomposer dump-autoload --no-devautoloadautoload-dev--no-devrequire-devautoloadcomposer dump-autoloadinstallupdatecomposer.json