packagist要求name字段必须为小写vendor/package-name格式,如myorg/mypackage;type应显式设为"library"以支持psr-4自动加载;version被忽略,仅识别git tag(须小写v开头);修改autoload后需运行composer dump-autoload。

name 字段必须是小写 vendor/package-name 格式
Packagist 拒绝任何含大写字母、下划线或斜杠数量不对的 name。比如 MyOrg/MyPackage、myorg_my_package、myorgmypackage 全部无效;只有 myorg/mypackage 被接受。
本地验证方式:运行 composer validate,它会立刻报错 The package name is invalid. —— 别等提交到 Packagist 后才看到红色提示。
-
name是包的唯一标识,影响自动加载路径、依赖解析、Packagist 索引和 IDE 补全 - vendor 名建议与 GitHub 组织名一致(如
acme对应https://github.com/acme/mypackage) - 如果只是本地开发测试,可加
"private": true防止误提交到 Packagist
type 字段决定包能否被 require 安装
type 不是装饰字段,它直接控制 Composer 的行为逻辑。设成 project 的包,别人执行 composer require myorg/mypackage 会失败并提示 Package myorg/mypackage cannot be installed as a dependency of project。
绝大多数可复用类库必须显式设为 "type": "library"(哪怕不写也默认是 library,但显式声明更安全)。
-
library:启用 PSR-4 自动加载,允许被其他项目require -
project:仅用于composer create-project初始化,禁止作为依赖引入 -
metapackage:无源码,只声明依赖,常用于一键安装整套工具链 - 自定义 type(如
laravel-package)需配套安装器,否则退化为library
autoload 配置错误会导致 Class not found 却不报路径
PSR-4 映射失效时,错误信息只有 Class 'AppServiceLogger' not found,不会告诉你它该去哪找、实际找了哪些路径——这是最常卡住开发者的地方。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
典型错配:"App\": "src/" 要求 class AppServiceLogger 必须位于 src/Service/Logger.php;如果文件实际在 src/Controllers/Logger.php,哪怕命名空间写对了也会失败。
- 优先用
psr-4,彻底弃用已废弃的psr-0 - 修改
autoload后必须运行composer dump-autoload,否则缓存不变 - 用
composer show -s查看当前生效的自动加载映射,确认前缀和路径是否出现在列表中 - 不要指望
classmap能兜底 PSR-4 的路径错误——它只在 PSR-4 匹配失败后才查表
version 字段在 Packagist 中完全被忽略
Packagist 不读取 composer.json 里的 version,它只认 Git tag。你写 "version": "9.9.9" 没有任何作用;但打一个 v1.0.0 tag 并推送,Packagist 就能生成对应版本。
常见翻车操作:
- 用
git push --tags推送所有 tag,结果漏推了最新 tag(建议用git push origin v1.2.3精确推送) - tag 名写成
V1.0.0或1.0.0,Packagist 不识别(必须小写v开头) - tag 所指 commit 里
composer.json缺字段或格式错误,Packagist 抓到的是空配置 - 没配 GitHub Webhook,新 tag 推了也更新不了 Packagist 页面(Payload URL 必须是
https://packagist.org/api/github)
首次发布后,用户看到的默认版本是 dev-main,直到你打第一个语义化 tag(如 v1.0.0),Packagist 才生成稳定版本并标记为 stable。










