composer强制要求package name全小写且仅用短横线分隔,否则install等操作直接失败;name变更后必须同步更新autoload.psr-4、命名空间、文件路径,否则类无法加载。

Composer 会直接拒绝任何含大写字母或下划线的 name 字段值,安装、发布、甚至本地 composer validate 都会失败。
为什么 composer install 报 “Invalid package name”
错误信息类似:Invalid package name "myvendor/my_package": Package names should be lowercase and use dashes for word separation。这不是警告,是硬性拦截——Composer 解析包名时先做正则校验,[A-Z_] 出现即终止。
-
name必须是两段式vendor/package-name格式,中间仅一个/ - vendor 和 package 都必须全小写,单词间只能用
-(短横线),不能用_、.、或大小写混排 - 哪怕你只是本地
require一个 path 仓库,只要composer.json里name不合法,composer install就会卡住 - Git 仓库名、目录名、GitHub 用户名都不影响校验——Composer 只读
name字段
name 写错后 autoload 为什么还报 Class not found
改完 name 不等于 autoload 自动对齐。PSR-4 映射和命名空间前缀往往依赖 name 自动生成或人工推导,一旦脱节,类就“消失”了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果原
"name": "myvendor/my_package"→ 改为"name": "myvendor/my-package",但没同步改autoload.psr-4的命名空间前缀,比如仍保留"MyVendor\MyPackage\": "src/",那src/Helper.php里的namespace MyVendor\MyPackage;就无法被加载 - 更隐蔽的是:Composer 默认把
vendor/package-name转为首字母大写的驼峰形式作为命名空间建议(如acme/json-helper→Acme\JsonHelper),但如果你代码里实际用的是MyVendor\MyPackage,那就必须显式在autoload.psr-4中声明,不能依赖默认 - 漏掉命名空间末尾的反斜杠
\(写成"MyVendor\MyPackage"而非"MyVendor\MyPackage\")会导致整个前缀匹配失效 - 改完必须运行
composer dump-autoload -o,否则vendor/autoload.php仍按旧规则加载
本地开发阶段最容易忽略的三件事
很多问题不是上线才暴露,而是从 composer init 第一步就埋下了。
- 用
composer init --name时,别输my_app或MyPackage,必须输yourname/my-awesome-package——yourname得和 Packagist 账号一致,否则以后发布不了 - 别让 Composer 自动推断
name:不加--name时,它可能把当前目录名MyProject推成root/myproject,其中root是非法 vendor - 运行
composer validate前,先确认name符合正则^[a-z0-9]([a-z0-9.-]*[a-z0-9])?\/[a-z0-9]([a-z0-9.-]*[a-z0-9])?$;不符合就别往下走,后面全是徒劳
最麻烦的不是改名本身,而是改完后要同步检查 name、autoload.psr-4、PHP 文件里的 namespace、文件路径这四者是否完全咬合——差一个字符,class_exists() 就返回 false。










