composer 严格要求 name 字段必须为小写 ascii 的 vendor/name 格式,含且仅含一个斜杠,vendor 和 package 均不得含非法字符或保留字,且 vendor 应与 packagist 账号一致。

“Cannot use avoid/invalid package name”不是 Composer 原生错误信息,实际是开发者把 avoid 当成 vendor 名、或误写 invalid 这类占位符进 name 字段导致的校验失败。根本原因只有一个:Composer 严格拒绝不符合 vendor/name 格式的字符串。
composer.json 的 name 字段必须满足哪些硬性条件
Composer 在解析 name 时会执行三重校验:是否含斜杠、前后是否非空、是否全小写且仅含字母数字及 -_.。任何一项不满足都会报类似 Invalid package name "avoid/invalid" 的错误(注意:错误里不会出现 “Cannot use avoid/invalid”,那是你手输的占位符被当真了)。
-
name必须是两段式,用单个/分隔,不能是avoidinvalid、avoid\invalid或avoid//invalid - vendor 部分不能是
avoid、invalid、root、test等保留字或无意义占位符——它应是你 Packagist 账号名或组织名(如mycompany) - package 部分不能含大写字母、空格、中文、@、#、$ 等字符;
my-awesome-tool✅,MyAwesomeTool❌,my awesome tool❌ - 如果你本地开发暂不发布,也别填
avoid/invalid—— 后续改名要重跑composer dump-autoload,PSR-4 命名空间映射也会错乱
执行 composer init --name 时怎么填才不出错
命令行初始化最容易踩坑:很多人直接回车让 Composer 推断,结果 vendor 被设成当前目录名或系统用户名(如 john/myapp),而 john 根本没注册 Packagist 账号,后续 composer require 会被其他包依赖时直接失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 手动指定:
composer init --name="myorg/my-api-client"(myorg必须是你 Packagist 实际注册的 vendor 名) - 如果只是本地 CLI 工具,vendor 名可用公司域名反写,比如
com-example/cli-tools,但必须确保全小写、无下划线 - 避免用
user-name这种带下划线的 vendor —— Composer 允许,但 Packagist 拒绝收录,且部分 IDE 无法正确识别命名空间 - 执行后立刻检查生成的
composer.json:确认"name": "myorg/my-api-client"是纯 ASCII、无不可见字符(尤其从文档复制时容易带入全角空格)
如何快速验证 name 是否合法
别等 composer install 报错才处理。最省事的是用 Composer 自带命令提前暴露问题:
- 运行
composer validate:它会明确指出name格式错误,并提示类似[ERROR] The property name is invalid, it must be in the format vendor/name. - 手动 grep 斜杠:
grep -o "/" composer.json | wc -l应该输出1;再检查前后是否为空:jq -r '.name' composer.json | sed 's|/.*||' | grep -q "^[a-z0-9._-]\+$" - 如果已报错,别改
composer.lock—— 它不存name,只删vendor/和composer.lock,修正composer.json后重装
真正麻烦的不是格式本身,而是 name 一旦写进历史提交,后期改名会导致 PSR-4 命名空间自动推导失效、Git diff 泛滥、CI 流水线缓存错乱。所以第一笔 name 就得对,而不是想着“先占个坑”。










