composer init卡在Package name是因为它严格校验自动推导的包名:必须为vendor/name格式、全小写、仅含字母数字/连字符/下划线、不能以数字开头、不能含空格或中文;目录名如"My Project"或"api_v2!"即触发卡顿,解决方法是重命名目录或显式指定--name参数并加--no-interaction。

composer init 为什么卡在 Package name?
它会自动从当前目录名推导包名,但校验极严:必须是 vendor/name 格式(如 myorg/myapp),全小写、只含字母数字/连字符/下划线,不能以数字开头,不能有空格或中文。目录叫 My Project 或 api_v2! 就直接卡住。
- 解决办法:先重命名目录,比如
mv "My Project" my-project - 或跳过自动推导,显式指定:
composer init --name="myorg/myapp" --no-interaction - 已卡住?按
Ctrl+C中断,别干等,再带参数重试
autoload 怎么配才让类能被自动加载?
composer init 默认不问 PSR-4,也不写 autoload 字段。哪怕你填了 "App": "src/",如果 JSON 里反斜杠没转义对、或者根本没加这段,Class not found 就照常报。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 交互中选
Would you like to define your autoload rules?→ 选yes→ 选PSR-4→ 输入命名空间(如App)和路径(如src/) - 手动编辑
composer.json时,注意双反斜杠:"App\": "src/",不是"App": "src/"或"App": "src/" - 改完立刻运行
composer dump-autoload,否则不生效 - 路径必须精确匹配:类在
lib/就写"lib/",错一个字符就加载失败
require 写错会导致 install 直接失败
composer init 允许你填 require,但填错版本约束或包名,下一步 composer install 就会报 no matching package found 或 PHP 版本不兼容。
-
php版本必须用 caret 表达式:php:^8.1,不能写php >=8.1或php:8.1 - 第三方包要写全名+版本,比如
guzzlehttp/guzzle:^7.8;--require参数每次只能跟一个依赖 - 本地 PHP 版本低于
^8.1(比如是 8.0),composer install会拒绝执行,不是 bug 是保护机制 - 生成后建议立刻跑
composer validate,能提前发现name缺 vendor 段、license 格式不对等硬伤
type=project 还是 type=library?
这个字段决定 Composer 怎么处理你的项目。选错会导致 autoload 不生效、require-dev 被忽略、甚至发布到 Packagist 失败。
- 如果你只是写个 CLI 工具或内部脚本,用
--type=project(默认值),它不会启用 autoload 规则供别人require - 如果你打算把这个项目打包发布,让别人通过
composer require myorg/mypkg引入,才用--type=library - 即使
require为空,也得跑一次composer install—— 它会生成vendor/autoload.php,否则入口文件里require 'vendor/autoload.php'会失败
composer.json,它不是“项目创建”,更不等于“能跑了”。autoload 没配、type 选错、require 写死版本——这些都得你自己检查,Composer 不会替你兜底。

















