composer 的 name 字段必须严格遵循 vendor/package 格式,vendor 须与 packagist 账号一致、全小写、用短横线分隔,否则导致安装失败、类加载失效;需显式配置 autoload.psr-4 并同步更新,发布前须 validate + 实际 require 测试 + 打 git tag。

Composer 的 name 字段不是“随便起个名字就行”,它直接决定包能否被安装、能否被他人正确引用、autoload 是否生效——写错一个字符,composer install 就会报 Invalid package name 或后续 Class not found。
name 字段必须是 vendor/package 格式,且 vendor 必须与 Packagist 账号一致
这是最常被跳过的硬性前提。Packagist 不认你本地目录名、不认 GitHub 仓库名、也不认你 Git 用户名,只认 composer.json 里写的 name 字段。
- 如果你在 Packagist 注册的账号是
myname,那name必须以myname/开头,比如"myname/json-helper";写成"myname2/json-helper"或"myname/json_helper",别人composer require myname/json-helper就会失败 - vendor 部分不能是
php、ext、lib、composer这类保留字(虽不报错,但 Packagist 可能拒绝提交) - 别依赖
composer init的自动推断:它可能把当前文件夹MyApp推成root/myapp,而root并不是你的 Packagist vendor
package 名称必须全小写、用短横线分隔,不能含大写字母或下划线
大小写和符号不是风格问题,而是 Linux + Git + PSR-4 自动加载共同作用下的故障触发点。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 合法:
"myname/api-client"、"myname/cache-driver-redis" - 非法:
"myname/ApiClient"(含大写)、"myname/api_client"(含下划线)、"myname/1.0-api"(数字开头)、"myname/api client"(空格) - 错误示例会直接导致
composer validate失败,报错类似:Invalid package name "myname/ApiClient": package names must be lowercase and consist of words separated by dashes. - 即使绕过验证强行发布,Linux 下 Git 会忽略大小写差异,造成 autoload 找不到类文件(
Helper.php和helper.php被视为同一文件)
PSR-4 命名空间前缀通常由 name 字段推导,但不可依赖默认行为
Composer 在未显式配置 autoload.psr-4 时,会尝试把 vendor/package-name 转为首字母大写的驼峰形式作为默认命名空间(如 myname/json-helper → MynameJsonHelper),但这极易出错。
- 实际代码里若用了
App或MyName(注意 N 大写),而name是myname/json-helper,自动加载器就找不到类 - 更稳妥的做法是显式写死:
"autoload": {"psr-4": {"MyName\JsonHelper\": "src/"}},注意双反斜杠\和末尾反斜杠缺一不可 - 修改
name后,必须同步检查并更新autoload.psr-4的键值,否则composer dump-autoload -o生成的映射仍指向旧命名空间 - 验证是否生效:在测试项目中
require后执行var_dump(class_exists('MyName\JsonHelper\Helper')),而不是只看composer install是否成功
本地开发阶段也必须按规范填 name,别等发布才改
很多人以为“先本地跑通再说”,结果后期改 name 引发一连串连锁反应:Git 历史污染、autoload 映射重写、CI 构建失败、已有依赖无法升级。
- 改
name后,已安装的vendor/缓存可能残留旧路径,建议顺手运行composer clear-cache - 如果只是临时测试,也请填一个符合规范的占位名,比如
"dev/test-package"(确保 vendor 是你控制的账号) - 发布前必做两件事:
composer validate检查语法合规性,再建一个干净测试项目composer require dev-main实际调用类验证 autoload - 别忘了打 tag:Packagist 只认 Git tag,不是分支。
git tag v1.0.0 && git push origin v1.0.0缺一不可
真正容易被忽略的不是规则本身,而是 name 字段一旦写进 composer.json,它就同时绑定着 Packagist 路径、依赖解析标识、autoload 命名空间起点和 Git 仓库语义——四个系统共用一个字段,改一处就得同步四点。










