composer init 仅是 json 向导,不自动生成 autoload、不校验 name 格式(须为 vendor/name)、不创建 vendor 目录;填错将导致 class not found、ci 失败、packagist 拒绝提交及工具解析异常。

直接运行 composer init 不会自动配好 autoload、不校验 name 格式、也不生成 vendor 目录——它只是个 JSON 向导,填错任意一项,后续 class not found 或 CI 失败基本跑不了。
Package name 必须是 vendor/name 格式,否则 validate 通不过
填 myapp 或 my_app 或 MyApp 都会触发 composer validate 报错,CI 流水线卡在第一步。Packagist 拒绝提交,某些工具(如 PHPStan)也会因解析失败跳过分析。
- 合法示例:
acme/blog、orgname/cli-tool - Git 用户名含空格或中文时,
composer init可能自动读取并生成非法包名,建议显式加--name="acme/myapp" - 老项目迁移别用目录名当包名:目录叫
legacy-site,应填acme/legacy-site,而非legacy-site
autoload 不配,require 'vendor/autoload.php' 就等于白 require
交互式流程中遇到 Would you like to define your autoload rules? —— 一定选 yes,再选 PSR-4,输入命名空间(如 App\)和路径(如 src/)。注意反斜杠必须双写:"App\": "src/",单写 "App": "src/" 是 JSON 语法错误。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 非交互模式下必须整段传 JSON:
--autoload='{"psr-4":{"App\":"src/"}}',双引号不转义会被 shell 吃掉 - 路径填错(比如类在
lib/却填src/),composer dump-autoload生成的映射为空,class_exists('AppFoo')直接返回false - 即使没依赖,也要跑一次
composer install,否则vendor/autoload.php不会生成
非交互模式不是“跳过”,而是“全靠你填齐”
--no-interaction 不提供默认值,缺任何一个必需字段(--name、--author)命令立即退出,不会写文件。
- 最小可用命令:
composer init --no-interaction --name="acme/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,会直接报错退出
初始化完立刻跑 composer validate,别等 CI 报错才查
它能提前发现硬伤:license 写成 MIT License(应为 MIT)、authors 缺邮箱、name 缺 vendor 段、JSON 字段拼写错误(如 autoloa)等。
-
composer validate是唯一能静态检查 composer.json 合法性的命令,比手动 eyeball 可靠得多 - 老项目接入时,
composer init不扫描现有代码,也不会推断 PHP 版本要求——你填什么,它就信什么 - type 字段别漏:设
"type": "project"表示这是最终应用;设"library"才会启用 autoload 规则供外部引用
最常被忽略的点:autoload 的命名空间末尾反斜杠、JSON 字符串 shell 转义、以及 composer validate 这一步——它不耗时,但省下的调试时间够你重装两次 PHP。










