composer init 仅生成空 composer.json,不安装依赖或配置自动加载;Package name 必须为全小写 vendor/name 格式,目录名不可含空格或特殊字符;PSR-4 需手动配置且路径与命名空间严格对应,否则类无法加载;require 与 require-dev 不可错放,type 应按项目性质设为 "project" 或 "library"。
composerinit 不是“创建项目”,它只生成一个空壳,不装包、不建、不配自动加载——漏掉任一关键配置,后续必报或。
Package name 必须是 vendor/name 格式,否则直接卡死
交互式运行
时,第一步 “Package name” 输入
或
会立刻报
。Composer 强制要求全小写、含斜杠、不含空格/中文/下划线/大写字母。
目录名含空格(
)或特殊符号(
),init 会卡住——先重命名目录,或用
跳过
Git 用户名带中文或空格,可能被自动读取为非法包名,建议一律显式传
是合法的本地项目名;
比
安全得多
autoload 不手动加 PSR-4,类永远找不到
交互流程里问
,选
后只支持
,**不支持 PSR-4**——这是长期存在的设计限制。你写了
并声明
,不手动加配置,
就不会注册任何映射。
非交互模式下必须整段 JSON 传入:
(注意双反斜杠是 JSON 转义必需)
路径
必须真实存在,且相对于
所在目录;写成
或绝对路径全部无效
命名空间末尾的反斜杠不能少:
正确,
或
都会导致
返回
require 和 require-dev 放错位置,上线就静默炸
这不是“本地能跑就行”的问题,而是部署一致性契约。
会严格按字段删包,放错位置等于主动拆弹。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
进
→ 上线后所有 HTTP 请求失败
进
→ 生产环境白装几十 MB,还可能因版本冲突导致
失败
搜你代码里所有
和
:出现在
或
的类,对应依赖进
;只在
、
或 CI 脚本里出现的,进
type 字段填错,autoload 白配、CI 白跑
默认值是
,但绝大多数人初始化的是 CLI 工具、网站或脚本——这类项目该设为
。填错会导致两个后果:一是别人
你的包时意外触发 autoload(不该被当库引用),二是某些工具(如 Symfony Flex)完全忽略你的配置。
本地应用/工具:显式写
打算发布成可被其他项目
的通用库:才用
不影响
行为,但会影响
是否生效、以及 Packagist 的兼容性检查
最常被忽略的其实是路径与命名空间的严格对应关系:哪怕
配对了、
也跑了,只要
里写的是
而不是
,照样
。这不是 Composer 的 bug,是 PSR-4 规则本身的要求。
composer.jsonvendor/Class not foundfailed to open streamcomposer initmyappMyAppInvalid package nameMy Projectmy-app!--name="myorg/myapp"--namelocal/mytoolmyorg/myappmyorg_myappWould you like to define your autoload rules?yesclassmapsrc/Hello.phpnamespace App;composer dump-autoload--autoload='{"psr-4":{"App\":"src/"}}'"src/"composer.json"./src/""App\""App""App\\"class_exists()falsecomposer install --no-devguzzlehttp/guzzlerequire-devphpunit/phpunitrequireinstallusenewsrc/app/requiretests/bin/require-dev"library""project"require"type": "project"require"type": "library"typecomposer installcomposer dump-autoloadautoloaddump-autoloadsrc/App/Service/Logger.phpnamespace App;namespace AppService;Class not found