私有仓库可用需同时满足三条件:satis命令全局可执行、packages.json由绝对路径output-dir生成并被Web服务正确托管、客户端composer.json显式声明私有源且禁用packagist.org。

直接跑完 satis build 不等于私有仓库能用,90% 的失败都卡在三个地方:satis 命令不可执行、packages.json 托管路径不对、客户端没关 packagist.org。
确保 satis 命令全局可用
装上不等于能用。全局安装后必须让系统 PATH 找得到它:
- 运行
composer global require composer/satis后,检查~/.composer/vendor/bin(Linux/macOS)或%USERPROFILE%\AppData\Roaming\Composer\vendor\bin(Windows)是否已加入环境变量 - 执行
which satis(macOS/Linux)或where satis(Windows),确认返回有效路径 - 若报
command not found,别重装,先修正 PATH;否则后续所有构建都会中断在第一步 - 验证:运行
satis --version应输出类似2.0.0的版本号
satis.json 必须含且仅含三要素:repositories、require-all/require、output-dir
结构错位或字段缺失会导致生成空 packages.json 或包数量为 0:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
repositories是顶层数组,每个元素必须是完整对象:{"type": "vcs", "url": "https://git.internal/lib.git"},不能只写字符串 URL -
require-all和require互斥:全量镜像用"require-all": true;精确控制用"require": {"vendor/package": "*"} -
output-dir强烈推荐绝对路径,如/var/www/satis;相对路径易因工作目录不同导致 dist ZIP 生成错位,使下载链接 404 - Git 仓库根目录下必须存在合法
composer.json,且name字段为小写字母+短横线(如"company/auth-sdk"),不能含大写或下划线
Web 服务必须正确托管 packages.json 并返回正确 MIME 类型
Satis 不启动任何服务,只生成静态文件。没 Web 服务器,composer install 就会 404:
- Nginx 配置示例:
root /var/www/satis;,并确保访问https://pkg.internal/packages.json返回 HTTP 200 +Content-Type: application/json - Nginx 需加
types { application/json json; },否则 Composer 解析失败 -
homepage字段值(如"https://pkg.internal/")末尾必须带/,否则 Composer 拼出的 dist URL 会变成https://pkg.internal/dist/xxx.zip→ 多一个/导致 404 - dist ZIP 文件路径由 Satis 自动生成(如
dist/vendor-package/version-hash.zip),Web 服务器必须允许该路径被公开访问(无权限拦截、无重定向)
客户端 composer.json 必须显式声明源并禁用 packagist.org
哪怕 packages.json 已能浏览器打开,只要没关默认源,Composer 仍会先连 repo.packagist.org 超时 fallback:
- 项目根目录
composer.json中必须包含:{ "repositories": [ {"type": "composer", "url": "https://pkg.internal/"} ], "packagist.org": false } -
"url"末尾必须带/,否则 Composer 会错误拼成https://pkg.internal/packages.json→https://pkg.internal/packages.json/packages.json - 改完后务必运行
composer clear-cache,否则旧缓存可能掩盖配置生效 - 验证方式:运行
composer show -p,应只显示你私有源里的包,且不出现repo.packagist.org相关请求日志
最容易被忽略的是 homepage 和 url 结尾的斜杠 —— 看似微小,却直接决定 dist 文件能否下载成功。Satis 不做任何运行时校验,错配后只会静默生成无效链接。

















