satis 不生成管理页面,因其设计目标是轻量静态,仅输出 packages.json、dist 包和极简 index.html;所谓“管理界面”需自行开发或借助第三方工具,官方不支持也不维护。

Satis 本身不提供 Web 管理界面,构建出的只是静态文件;所谓“带管理界面”,实际是靠手动拼接 HTML + JavaScript 实现的简易浏览页,或依赖第三方工具(如 Packagist UI 克隆)——但官方不支持、也不维护这类功能。
为什么 satis build 不生成管理页面
Satis 的设计目标就是轻量、静态、无服务端逻辑。它只输出:packages.json、dist/ 下的 ZIP/TAR 包、以及一个极简的 index.html(仅含仓库名和链接列表)。这个 index.html 不是管理界面,不能搜索、不能筛选、不能查看包详情或版本历史。
- 所有“可视化管理”需求都得自己加:比如用 PHP 写个前端读取
packages.json渲染表格,或用 Vue 加载 JSON 做 SPA - 别指望
satis.json里配个"ui": true就能开启——它根本不存在 - 如果你看到别人有“管理后台”,那一定是他们在 Satis 输出目录外又搭了一套独立服务
如何让 packages.json 可被前端安全读取
浏览器直接加载 packages.json 会触发 CORS 限制,除非 Web 服务器显式放行。Nginx 示例配置关键项:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
location = /packages.json {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET';
add_header 'Content-Type' 'application/json';
}
- 不要用
add_header在 server 块全局开 CORS,避免暴露敏感路径 - 如果部署在子路径(如
/satis/packages.json),location 要写成location ^~ /satis/packages.json - Chrome 会拒绝加载没有
Content-Type: application/json的响应,即使内容正确
手动加一个基础包浏览页(无后端)
把以下 HTML 保存为 web/index.html(覆盖 Satis 默认页),它会自动 fetch 同域下的 packages.json 并列出所有包名:
<h2>Private Packages</h2>
- 它不解析版本、不展示描述、不处理嵌套结构(如
packages['vendor/name']是对象数组),仅作示意 - 若需完整功能,推荐用现成静态站点生成器(如 Hugo + JSON 数据源),而非硬写 JS
- 别在生产环境用
fetch直读packages.json——体积大时会卡死浏览器,Satis 输出的 JSON 动辄几 MB
真正需要管理功能?换方案
如果你明确需要增删包、权限控制、审计日志、Webhook 集成等,Satis 就不是合适选择:
-
packagist/packagist是可部署的完整服务,但依赖 MySQL + Redis + cron,运维成本高 -
toran-proxy(已归档)曾提供 GUI,但停止维护;其替代品如private-composer社区版仍需自行部署后端 - 企业级场景建议用 Nexus Repository 或 Artifactory,它们原生支持 Composer 格式 + RBAC + UI + CDN 缓存
硬给 Satis 套管理界面,就像给自行车加涡轮——结构不匹配,维护起来反而更重。先确认你到底要“能看”,还是“能管”。










