composer init仅生成基础composer.json,不安装包、不创建目录、不写代码;跳过提问则对应字段缺失,包名须含/,需手动补autoload、验证并dump-autoload。

直接用 composer init 生成基础文件最稳妥,但生成后不补关键字段、不验证、不执行 dump-autoload,等于白干——类找不到、依赖装错、CI 失败,全在这几步埋雷。
composer init 生成的 composer.json 为什么总缺东西?
它只是填空式生成器,不替你做判断:跳过 autoload 提问 → "autoload" 字段压根不出现;一路回车跳过 require → "require" 是空对象甚至整个字段消失;包名没填 / → 直接报 Invalid package name。它不会自动探测 src/ 目录,也不会帮你加 "php": "^8.1" 这种运行时必需约束。
- 必须手动补上
"autoload",最小可用配置至少是{"psr-4": {"App\": "src/"}}(注意双反斜杠和末尾斜杠) -
"name"字段不能空,格式必须是vendor/name(全小写、含斜杠),本地项目可填local/mytool - PHP 版本约束必须显式写进
"require",不是"config.platform.php"—— 后者只影响本地解析,不约束下游依赖
autoload 配了却 Class not found?检查这三处
Composer 不会在运行时报“路径写错了”,只会抛异常。问题几乎都卡在路径、命名空间或缓存上。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
-
"App\"写成"App"或"App\\"都会失效;Windows 下也必须用双反斜杠 - 路径如
"src/"必须真实存在,且相对于composer.json所在目录;"./src/"或"/full/path/src/"全部无效 - 改完
"autoload"后,必须手动跑composer dump-autoload(加-o适合生产),install或update不会自动触发
require 和 require-dev 放错包,上线就静默炸
这不是“本地能跑就行”的问题,而是部署一致性契约。放错位置,composer install --no-dev 会直接破坏运行环境。
- 搜你代码里所有
use和new:出现在src/或app/里的类,对应包进"require";只在tests/、bin/或 GitHub Actions 脚本里出现的,进"require-dev" -
guzzlehttp/guzzle进require-dev→ 上线后 HTTP 请求全挂;phpunit/phpunit进require→ 生产环境白装几十 MB,还可能因版本冲突导致 install 失败 - 执行
composer install --no-dev && php -r "new AppHttpController();",能成功实例化才说明边界清晰
初始化后立刻要做的三件事
刚生成 composer.json 只是起点。漏掉任何一项,后续都会遇到类找不到、依赖冲突、CI 构建失败等问题。
- 立刻运行
composer validate—— 它比人眼快十倍发现 JSON 格式错误、全角引号、BOM、字段缺失 - 确认
"type"字段:CLI 工具或网站项目设"project",库项目才用"library";设错会导致 autoload 不生效或被 Packagist 拒收 - 提交
composer.lock到 Git —— 它锁死每个包的确切版本和哈希值,没有它,不同机器上composer install可能装出行为不一致的依赖

















