composer init仅生成空composer.json,不创建项目、不装包、不建vendor目录;Package name必须为全小写vendor/name格式(如acme/blog),否则交互式初始化卡在第一步或报Invalid package name。

composer init 不创建项目,只生成 composer.json;填错 name、漏配 autoload、跳过 composer install,后续必出 Class not found 或 CI 失败。
Package name 必须是 vendor/name 格式,否则直接卡住或报错
交互式运行时第一步就卡在 Package name,常见于目录名含空格(My Project)、大写(MyApp)或特殊符号(project_v2!)。Composer 强制校验:必须全小写、字母数字/连字符/下划线、以字母开头、且含且仅含一个 /。
- 填
myapp、my_app、MyOrg/MyProj→ 全部触发Invalid package name - 合法示例:
acme/blog、local/cli-tool、orgname/package-name - Git 用户名含中文或空格时,
composer init可能自动读取并生成非法包名,建议显式加--name="acme/myapp" - 老项目迁移别用目录名当包名:目录叫
legacy-site,应填acme/legacy-site,而非legacy-site
autoload 不配 PSR-4,require 'vendor/autoload.php' 就等于白 require
交互流程中问到 Would you like to define your autoload rules?,选 yes 后默认只支持 classmap,**不支持 PSR-4**——这是长期存在的限制。你 src/ 下全是 App 命名空间的类,但没手动加配置,composer dump-autoload 就不会注册任何映射。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须手动加:
"autoload": {"psr-4": {"App\": "src/"}}—— 注意反斜杠要双写,"App": "src/"是 JSON 语法错误 - 路径必须真实存在且相对
composer.json:填"src/"但类实际在lib/,class_exists('AppFoo')直接返回false - 非交互模式下传 JSON 必须用单引号包裹:
--autoload='{"psr-4":{"App\":"src/"}}',否则 shell 会吃掉双引号 - 即使没依赖,也要跑一次
composer install,否则vendor/autoload.php根本不会生成
--no-interaction 不是跳过,是“缺一不可”的硬性参数模式
--no-interaction 常被误认为“一键初始化”,但它根本不提供默认值。缺任何一个必需字段(--name、--author),命令立即退出,不写文件、不预览、不兜底。
- 最小可用命令:
composer init --no-interaction --name="acme/myapp" --author="Me <me@example.com>" --type=project -
--require必须带语义化约束:guzzlehttp/guzzle:^7.8合法,guzzlehttp/guzzle会报Could not parse version constraint - 多个依赖必须拆开写:
--require="php:^8.1" --require="guzzlehttp/guzzle:^7.8",不能合并成一个字符串 -
--autoload参数值格式有坑:某些版本支持psr-4:App\:src/这种冒号分隔写法,但更通用的是整段 JSON 单引号包裹
初始化完立刻跑 composer validate,别等 CI 报错才查
composer validate 是唯一能静态检查 composer.json 合法性的命令。它能提前发现:license 写成 MIT License(应为 MIT)、authors 缺邮箱、name 缺 vendor 段、字段拼写错误(如 autoloa)等硬伤。
- 填了
php:^8.1却在 PHP 7.4 环境跑composer install,会直接报错退出 -
require-dev和require别混填:比如把phpunit/phpunit放进require,可能导致生产环境装测试工具 - 交互式流程最后的预览环节是唯一检查机会,输
no可重来,输yes就落盘,不可撤回 -
composer init从不生成vendor/、不写composer.lock、不安装任何包——这些全是composer install的事
最易被忽略的点:autoload 路径和命名空间必须严格匹配真实文件结构,且反斜杠在 JSON 中必须双写;composer validate 不是可选项,是上线前必须跑的守门员。

















