satis命令找不到是因为PATH未配置;composer global require composer/satis后,需将~/.composer/vendor/bin(Linux/macOS)或%APPDATA%\Composer\vendor\bin(Windows)加入系统PATH,否则which satis或satis --version均会报command not found。

satis build 命令找不到,PATH 没配对就白搭
装完 composer global require composer/satis 不等于能用 satis 命令。Linux/macOS 下必须确认 ~/.composer/vendor/bin 在 $PATH 里,Windows 要检查用户环境变量是否包含该路径。
验证方式很简单:which satis 或 satis --version。如果报 command not found,别重装,先改 PATH;否则后续所有构建都会卡死在“找不到命令”上。
- 全局安装后,
satis可执行文件实际在~/.composer/vendor/bin/satis(Linux/macOS)或%APPDATA%\Composer\vendor\bin\satis.bat(Windows) - CI 环境中常见问题:CI runner 用户没加载 shell profile,PATH 里缺这一段,得显式
export PATH="$HOME/.composer/vendor/bin:$PATH" -
php bin/satis是从源码运行的写法,不推荐——它绕过 Composer autoloader,容易因依赖版本冲突失败
satis.json 里包没进索引,require-all 和 require 别混用
Satis 不会自动扫描 Git 仓库所有 tag,它只看你明确写进 require 或 require-all 的内容。漏写、错写、混用,都会导致 packages.json 为空或静默丢包。
常见错误配置:
-
"repositories": ["https://git.internal/pkg"]—— 错!repositories必须是顶层数组,每个元素是完整对象:{"type": "vcs", "url": "https://git.internal/pkg"} -
"require-all": true+"require": {...}共存 —— 错!二者互斥,Satis 会忽略require,只处理require-all - 目标 Git 仓库根目录下没有
composer.json,或其中name字段含大写/下划线(如"Acme/Utils"或"acme_utils")—— Satis 解析失败,直接跳过 - 用了
"require": {"acme/utils": "*"},但仓库只打了dev-maintag —— Satis 不认开发分支,除非你加"minimum-stability": "dev"并设"skip-dev": false
packages.json 返回 404,Web 服务器 root 没对齐 output-dir
satis build 只生成静态文件,不启动任何服务。Nginx/Apache 配置错位,composer install 就必然报 Could not fetch packages.json。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
关键三点必须对齐:
- Nginx 的
root指令值,必须和satis.json中output-dir的绝对路径完全一致(比如"output-dir": "/var/www/satis"→ Nginxroot /var/www/satis;) - 确保 Web 服务器把
packages.json当作默认索引:index packages.json;(Nginx),或 Apache 启用DirectoryIndex packages.json -
satis.json中homepage必须和最终可访问的根 URL 完全一致,包括末尾斜杠:"https://packages.internal/"≠"https://packages.internal"—— 少了/,dist URL 就会拼成.../dist/acme-utils/1.0.0-hash.zip而不是.../dist/acme-utils/1.0.0-hash.zip
客户端 composer.json 配错位置,packagist.org 没禁用就拉错包
私有源配置必须写在你要装包的那个项目的顶层 composer.json 里,不是 Satis 自己的配置文件,也不是私有包自身的 composer.json。
典型错误写法:
- 把
repositories写在require下面 —— 整个字段被忽略 -
"repositories": [{"type": "composer", "url": "https://packages.internal"}]但没加"packagist.org": false—— 同名包仍从官方源拉,覆盖你的私有版本 - 私有源放在
repositories数组第二位甚至更后 —— Composer 按顺序查找,不会合并同名包,优先匹配到官方源就停了 - URL 少了结尾斜杠:
"https://packages.internal"→ Composer 会拼出https://packages.internal/packages.json,而实际需要的是https://packages.internal//packages.json(双斜杠)
最易被忽略的一点:Satis 生成的 ZIP 文件路径(如 dist/acme-utils/1.0.0-hash.zip)必须能被公开访问,且响应头含 Content-Type: application/zip;否则 composer install --prefer-dist 会 fallback 到 git clone,而内网 Git 服务器可能根本没开外网权限。

















