根本原因是satis未扫描到包源:type必须为"vcs",url须指向git根目录且satis有访问权限;composer未查私源则因repositories未置顶层、url缺结尾斜杠、未禁用packagist.org回退或认证未配置。

为什么satis.json里写了url,但packages.json还是空的
根本原因不是配置语法错,而是 Satis 根本没扫描到你的包源。它不会自动发现 Git 仓库里的 composer.json,必须满足三个硬性条件:
-
type必须是"vcs"(不是"package"或漏写),否则 Satis 当作无效项跳过 -
url必须指向 Git 仓库根目录(如https://gitlab.example.com/myorg/lib.git),不能是 raw 链接或网页地址 - Satis 运行时得有权限访问该仓库:HTTP 方式需提前配好
auth.json或环境变量;SSH 方式需确保~/.ssh/id_rsa对应私钥已加载且目标服务器允许该 key 登录
验证方式很简单:在 Satis 服务器上手动执行 git ls-remote https://gitlab.example.com/myorg/lib.git。失败就别跑 satis build,先解决连通性。
composer.json里加了repositories,为什么composer require还是报Could not find package
这不是包不存在,而是 Composer 根本没查你的私有源。Satis 是静态文件生成器,不提供服务端逻辑,所以客户端行为完全取决于项目级配置是否“显式生效”:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
repositories必须写在项目composer.json的顶层,不能嵌套在require或其他字段里 -
url值必须以/结尾(如"https://pkg.example.com/"),否则 Composer 会拼出https://pkg.example.com/packages.json而不是https://pkg.example.com/packages.json(少个斜杠就 404) - 必须显式关闭 Packagist 回退:
"packagist.org": false,否则同名包优先从官方源拉,你配的私源形同虚设 - 如果 Satis 源启用了 HTTP Basic Auth,
url中不能只写域名——要写成"https://user:pass@pkg.example.com/",或单独配auth.json文件
怎么让dev-main和v1.2.3这类非标准 tag 被收录
Satis 默认只认 1.2.3 这类纯数字语义化版本,v1.2.3 和 dev-main 都会被过滤掉。关键不是改包名,而是调整 Satis 的解析策略:
- 在每个
repositories项里加"no-api": true,强制 Satis 用git ls-remote扫描分支和 tag,绕过 GitHub/GitLab API 的 tag 格式限制 - 显式声明要包含的分支:
"branches": ["main", "dev-*"]("branches": true也行,但慢得多) - 启用归档并放开 dev 版本:
"archive": {"skip-dev": false},配合"require-all": true,否则v*tag 仍被忽略 - 注意:
"archive"开启后会生成dist/子目录,客户端走 dist 下载更稳定,但构建时间明显增加
构建慢、内存爆、satis build 卡住怎么办
Satis 构建过程本质是批量 git clone + 解析,瓶颈通常不在 CPU,而在网络和 I/O。几个实操有效的调优点:
- 加
--skip-errors参数:遇到单个仓库超时或认证失败时继续,避免整批中断 - 限制 Git 超时:
git config --global core.sparseCheckout true+ 在 Satis 服务器上设置export GIT_TIMEOUT=30 - 调高 PHP 内存限制:
php -d memory_limit=2G /path/to/satis build satis.json output/ - 定期清理旧 dist 文件:
find output/dist -name "*.zip" -mtime +7 -delete,不然磁盘撑爆 - 别把
require-all: true和大量私有仓库混用——每多一个仓库,Satis 就多一次git ls-remote,延迟线性叠加
真正容易被忽略的是 Web 服务器配置:Nginx/Apache 必须允许对 .json 文件返回正确的 Content-Type: application/json,否则浏览器能打开页面,Composer 却报 Invalid repository type —— 它不是连不上,是连上了但读不懂响应体。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










