Satis 本身不支持中文包名,所有私有包的 name 字段必须全小写加短横线(如 acme/utils),含中文、下划线、大写字母或空格会导致构建静默失败、包被丢弃、composer require 找不到。

直接说结论:Satis 本身不支持中文包名,所有私有包的 name 字段必须全小写 + 短横线(如 acme/utils),含中文、下划线、大写字母或空格会导致构建静默失败、包被丢弃、composer require 找不到。
为什么 composer require 中文 name 的包总报 “Could not find package”
这不是网络或权限问题,而是 Satis 解析 composer.json 时直接跳过非法 name。Composer 官方规范强制要求包名只能是小写字母、数字、短横线和点号,且必须以字母开头 —— 中文字符根本不在允许字符集内。
- Git 仓库根目录下的
composer.json里写了"name": "公司/工具库"或"name": "acme_支付sdk"→ Satis 构建时忽略该包,packages.json里压根不出现 - 即使你手动改了 URL 或加了
type: "package",Composer 客户端也会在解析阶段报Invalid package name并终止 - 错误现象通常是:
composer install成功但没装你的包,composer show列不出,packages.json里也搜不到对应name
satis.json 配置里 require 中文 vendor 名会失败吗
会。Satis 的 require 字段匹配的是 Git 仓库中 composer.json 的 name,不是目录名或 URL 路径。如果你写 "require": { "公司/工具库": "*" },它根本不会去匹配任何仓库 —— 因为 Satis 内部用的是严格字符串比对,而合法 name 不可能含中文。
- 正确做法:统一用英文 vendor + 小写短横线命名,例如
acme/payment-sdk、internal/auth-utils - 团队内部可用中文文档/README 说明每个包用途,但代码层必须遵守 Composer 命名约束
- CI 流水线可加 pre-commit 检查:用
composer validate验证每个私有包的composer.json,失败即阻断提交
中文项目名、中文注释、中文 README 会影响 Satis 吗
完全不影响。Satis 只读取 composer.json 的 name、version、require 等结构化字段,其余如 description、homepage、readme、autoload 中的路径,全部支持 UTF-8,中文照常显示。
-
"description": "内部统一支付 SDK,支持微信、支付宝"→ 正常入库,packages.json里可见 -
"autoload": { "psr-4": { "Acme\Payment\": "src/" } }→ 类名和命名空间可含中文注释,但 PHP 本身不支持中文标识符,实际编码仍需英文 - Satis 生成的 HTML 页面(如果启用)也能正常渲染中文
description和homepage
想让开发者看到中文提示,有什么安全替代方案
别动 name,改用 description + 元包(metapackage)+ 内部文档闭环。这是企业级落地最稳的方式。
- 在私有包的
composer.json里写清晰中文description,它会出现在composer show和 Satis 生成的 HTML 页面中 - 建一个内部
company/internal-packages元包,require所有真实包,并在它的description里写“【中文功能列表】支付 SDK|用户中心|日志中间件” - 所有新成员入职时,分发一份 Markdown 文档,映射关系如:
acme/payment-sdk → 支付 SDK(含微信/支付宝) - 禁止在 CI 或
composer.json中硬编码中文逻辑,所有自动化流程只认标准name
真正卡住 Satis 的从来不是语言,而是对 Composer 规范的偏离。只要 name 合法、version 有 tag、url 可 clone、packages.json MIME 正确,中文描述和文档就能自然融入整个闭环 —— 剩下的只是团队约定和工具链配合。


















