composer init 本质是交互式生成 composer.json 文件,不安装依赖、不拉取代码、不创建目录结构;卡在“package name”因目录名含空格/大写/特殊字符,需重命名目录或用 --name 显式指定 vendor/name 格式。

用 composer init 创建项目,本质是生成一个干净、可控的 composer.json;它不拉代码、不装包、不建目录结构——想直接跑起来的 Laravel 或 Symfony 项目,该用 composer create-project。
composer init 为什么卡在 “Package name”
它会尝试从当前目录名自动推导包名,但只接受全小写、字母数字、连字符和下划线组成的字符串,且必须含 /(如 myorg/myapp)。目录名带空格、大写字母(MyProject)、中文或感叹号(demo-v2!)都会直接卡住或报 Invalid package name。
- 立刻重命名目录:
mv "My Project" my-project - 跳过交互,显式指定:
composer init --name="myorg/myapp" --no-interaction - 已卡住?按
Ctrl+C中断,别等,再带参数重试
require 和 require-dev 填错版本约束会直接 install 失败
交互中问 “Which version constraint to require for…”,填的是约束表达式,不是版本号。填错会导致 composer install 死锁或装错版本。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 填
^2.0:允许安装 2.x 全部兼容版本(推荐日常使用) - 填
dev-main:拉取 main 分支最新提交(需确认minimum-stability设为dev) - 填
2.0.0(无符号):锁定死版本,后续update不生效 - 填
*:允许任意版本,极易引发冲突 - 填
main或master:Composer 不识别,报Could not find package
autoload 没配,类就永远找不到
composer init 默认不问 PSR-4,选 “Do you want to define your autoload settings?” 也只支持 classmap,不支持你常用的 src/ + App 映射。漏了这步,composer dump-autoload 白跑,new AppHello() 一定报 Class not found。
- 手动加进
composer.json:"autoload": {"psr-4": {"App\": "src/"}}(注意双反斜杠) - 非交互初始化时可一步到位:
--autoload='{"psr-4":{"App\":"src/"}}'(单引号包裹,防 shell 解析) - 改完立刻执行:
composer dump-autoload,否则不生效 - 老项目接入时,路径必须严格匹配实际结构(比如类在
lib/就不能写"src/")
type 字段设错,autoload 就白配
"type": "library" 和 "type": "project" 行为差异极大。设错会导致类加载失效、包不可被引用,甚至收不到 Flex 配方。
- 写 CLI 工具、网站、Laravel 应用 → 显式设
"type": "project"(避免被别人require时误触发 autoload) - 写 SDK、组件库、打算发布到 Packagist → 必须设
"type": "library"(否则autoload规则不生效) - 没写
type字段?Composer 默认当library,但很多模板脚本(如 Laravel 的post-create-project-cmd)依赖type: project才执行 - 私有模板想被
create-project拉取?composer.json里必须有"type": "project"
最常被忽略的是:init 只写 JSON,不验证 PHP 版本兼容性。你填了 "monolog/monolog": "^3.0",但本地是 PHP 7.4,install 就会卡死——它不会提醒你,也不会帮你降级。










