autoload-dev 字段指定仅在开发环境注册的自动加载路径,如"tests": "tests/",生产环境(--no-dev)完全忽略;修改后需手动执行 composer dump-autoload 生效。

autoload-dev 字段不是用来“开发时自动加载”的开关,而是专门告诉 Composer:哪些 PHP 文件只在 composer install --dev 或 composer update(默认含 dev)时才注册进自动加载器——生产环境(composer install --no-dev)完全忽略它们。
autoload-dev 里写什么路径?
它接受和 autoload 相同的结构,但语义不同:所有声明的映射仅用于测试、工具类等开发专用代码,不参与线上逻辑。
- 最常用的是
psr-4映射,比如:"autoload-dev": { "psr-4": { "Tests\": "tests/" } } - 也可以用
classmap扫描无命名空间的测试辅助类:"autoload-dev": { "classmap": ["tests/helpers/"] } - 不建议混用
files,因为全局引入的文件会在每次请求加载——哪怕只是开发环境,也容易引发意外副作用
为什么 vendor/autoload.php 不总是加载 autoload-dev?
因为 Composer 的自动加载器生成逻辑是分阶段的:vendor/autoload.php 本身不区分 dev/non-dev;真正起作用的是 composer dump-autoload 时是否启用了 --dev(默认开启)或 --no-dev。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer install→ 默认生成含autoload-dev的加载器 -
composer install --no-dev→ 完全跳过autoload-dev配置,生成的vendor/autoload.php里没有那些映射 -
composer dump-autoload --no-dev→ 手动强制剔除 dev 映射,适合 CI 构建前清理
常见错误:测试类在生产报 Class not found
这不是 autoload-dev 写错了,而是代码里直接引用了开发专用类(比如 TestsFooTest)且没做环境判断。
- PHPUnit 启动时会自己 require 测试文件,不依赖自动加载器——所以测试跑得通,不代表线上安全
- 如果在
src/里写了new TestsStubHelper(),生产环境必然报错,因为Tests根本没被注册 - 正确做法:把可复用的测试辅助逻辑放进
src/+ 正常autoload,或者用class_exists('Tests\FooTest', false)做运行时检查
最容易被忽略的一点:修改 autoload-dev 后必须重新执行 composer dump-autoload(或任何触发 autoloader 重建的命令),否则变更不会生效——这个步骤不像 autoload 那样在 install 时隐式触发,容易卡住调试节奏。










