composer init 仅生成空壳 composer.json,不配置 autoload、type 和 name 格式会导致类加载失败和 CI 报错;必须显式设置 autoload(如 PSR-4)、合法 name(vendor/name)并运行 composer validate 和 install。

composer init 不是创建项目,只是生成一个空壳 composer.json;不配 autoload、不设 type、不验 name 格式,后面 90% 的类加载失败和 CI 报错都源于此。
为什么 composer init 后 class not found?
因为 composer init 默认不写 autoload 字段,也不强制你选 type。哪怕你 src/ 下全是 App 命名空间的类,只要 composer.json 里没这行:
{"autoload": {"psr-4": {"App\": "src/"}}}
那 composer install 就不会注册自动加载规则,require 'vendor/autoload.php' 也加载不了你自己的类。
- 交互式流程中遇到
Would you like to define your autoload rules?—— 一定选yes,再选PSR-4,输入命名空间(如App)和路径(如src/),注意反斜杠要双写:App\ - 非交互模式下必须显式传
--autoload,且 JSON 字符串要用单引号包裹:--autoload='{"psr-4":{"App\":"src/"}}' - 如果类文件在
lib/而不是src/,填错路径会导致 dump-autoload 生成空映射,class_exists('AppFoo')直接返回 false
Package name 填错会引发什么连锁反应?
name 字段必须是 vendor/name 格式,比如 myorg/myapp。漏 vendor 段(只写 myapp)、用下划线(my_app)、含空格或大写字母,都会让 composer validate 失败,CI 流水线卡住,Packagist 拒绝提交。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Git 用户名带空格或中文时,
composer init可能自动读取并生成非法包名,建议加--no-interaction+ 显式--name - 老项目迁移时,别用默认值:如果目录叫
legacy-site,就别填legacy-site,而应按组织规范写成acme/legacy-site -
composer.json写完立刻跑composer validate,它能提前报出license格式错误、authors缺邮箱等硬伤
非交互初始化怎么写才不翻车?
--no-interaction 不是“跳过所有”,而是“全靠你填齐”。缺任何一个必需字段(--name、--author),命令直接退出,不会给默认值。
- 最小可用命令:
composer init --no-interaction --name="myorg/myapp" --author="Me <me>" --type=project</me> - 加依赖要拆开写:
--require="php:^8.1" --require="guzzlehttp/guzzle:^7.8",不能合并成一个字符串 - PHP 版本约束别乱填:填了
"php:^8.1"却在 PHP 7.4 环境跑composer install,会直接报错退出 - 想配 autoload?必须整段 JSON 传进去:
--autoload='{"psr-4":{"MyOrg\":"src/"}}',双引号不转义会被 shell 吃掉,导致 Parse error
老项目接入 Composer 最容易漏哪步?
它不会扫描你已有的代码,也不会猜你要用什么命名空间。你填的 autoload 路径、type、require 全靠自己判断——填错一个,composer install 就可能装错版本,或者根本加载不了类。
- 已有
src/目录且类用App命名空间?交互中选 PSR-4 后,路径填src/,命名空间填App(注意结尾反斜杠) - 目录结构不标准(比如类在
classes/)?必须手动填对路径,./classes/或绝对路径都会让 autoload 失效 - 即使
require为空,也要跑一次composer install:它会生成vendor/autoload.php,这是后续 require 的唯一入口
最常被忽略的是:autoload 的命名空间末尾反斜杠和路径里的斜杠方向,"App\": "src/" 是对的,"App": "src/" 或 "App\": "./src/" 都会导致 dump-autoload 无响应。

















