composer init 不会扫描本地类库或生成 autoload 配置,仅交互式创建空 autoload 的 composer.json;autoload 映射需手动配置并执行 composer dump-autoload 才生效。

composer init 不会扫描本地类库,也不会生成 autoload 配置映射。
它只交互式生成基础 composer.json 文件,不读取任何 PHP 文件、不检测类、不写入映射逻辑。所谓“自动扫描”是常见误解。
为什么 composer init 完全不碰 autoload?
composer init 的定位是项目初始化向导,不是 autoload 构建工具。它的输出里 autoload 字段默认为空对象 {},连 "psr-4" 键都不会自动加。
- 它不会遍历
src/或lib/目录查找类 - 它不解析任何
.php文件内容,哪怕目录下全是合法class声明 - 它不检查命名空间、不推导路径映射、不生成
autoload_classmap.php或autoload_psr4.php - 即使你回答 “yes” 给 “Define your main namespace?”,它也只把字符串写进
name字段,而非autoload
composer dump-autoload 才是真正干活的命令
autoload 映射必须靠 composer dump-autoload(或 install/update)触发生成,且前提是 composer.json 中已手动配置好 autoload 块。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 没配
"psr-4": {"App\": "src/"},dump-autoload就只刷新空映射 - 配了但路径写成
"src"(缺尾部/),Composer 会静默忽略该条,运行时Class not found - 配了
"classmap": ["lib/"],但lib/是空目录或不存在,dump-autoload -o也不报错,只是跳过扫描 - Windows 下混用
和/(如"srclegacy"),会导致路径解析失败,类无法登记
想让 Composer “发现”现有类,得自己配路径 + 手动触发
没有魔法扫描,只有明确声明 + 显式执行。比如你有一堆类在 src/ 下,按 PSR-4 规则组织:
- 先手动编辑
composer.json,加上:"autoload": { "psr-4": { "MyApp\": "src/" } } - 确保
src/是真实存在的相对路径(不能是/src/或./src) - 命名空间末尾必须带双反斜杠:
"MyApp\",写成"MyApp"或"MyApp"都会匹配失效 - 运行
composer dump-autoload,此时才真正生成vendor/composer/autoload_psr4.php
容易被忽略的硬约束
autoload 生效不是“写了就对”,而是每个字符都参与匹配:
-
"MyApp\"和"src/"拼起来是src/SomeClass.php;如果类实际在src/Utils/SomeClass.php,那命名空间必须是MyAppUtils\ - 大小写敏感:Linux 下
src/和SRC/是两个目录,Composer 不做归一化 - 符号链接(symlink)默认被跳过,即使指向有效代码目录,也不会被扫描
-
autoload-dev里的配置,只有加--dev或未用--no-dev时才生效
dump-autoload 执行。漏掉任何一个斜杠、路径或参数,Class not found 就会准时出现。

















