内网 composer 解析卡在 resolving dependencies 是因默认连外网 packagist.org 失败,须改全局源为内网地址(如 https://packagist.internal)并确认 config -g repo.packagist 输出正确;satis 静态镜像需确保 web 服务返回 application/json、url 以 / 结尾、dist 路径可访问,且 require-all 与 require 不可混用。

内网能用 Composer,但默认配置会让它死在 Resolving dependencies 阶段——不是它不能跑,而是它一启动就试图连 https://repo.packagist.org/packages.json,而这个请求在内网必然失败。
怎么确认当前源是不是还在连外网
别猜,直接查。运行:
composer config -g repo.packagist
如果输出是 {"type": "composer", "url": "https://repo.packagist.org"},说明全局源没改,还在往外发请求。必须立刻切走。常见错误是只改了项目级配置(composer config repo.packagist ...),但 CI/CD 构建机读的是全局配置,项目级的会被忽略。
- 内网镜像地址为
https://packagist.internal,执行:composer config -g repo.packagist composer https://packagist.internal - 如果是本地文件系统镜像(如 Satis build 出的静态目录),URL 必须写成
file:///data/packagist(注意三个斜杠) - HTTP 地址默认被拒绝,除非显式加
--allow-http;更稳妥的做法是配好 HTTPS + 有效证书,或临时关校验:composer config -g secure-http false
Satis 构建后为什么 composer install 还报 404 或 file could not be downloaded
这不是网络不通,而是路径或响应头不合规。Satis 生成的是静态文件,靠 Web 服务器对外提供服务,稍有偏差就会静默失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Nginx/Apache 必须正确识别
packages.json的 MIME 类型:Nginx 需加types { application/json json; },否则返回text/plain,Composer 拒绝解析 - URL 必须以
/结尾,比如https://pkgs.internal/,少一个斜杠,Composer 会拼成https://pkgs.internal/packages.json(正确) vshttps://pkgs.internalpackages.json(404) - dist ZIP 文件放在
dist/vendor/package/version-hash.zip,Web 服务器要能直接GET到这个路径,且权限可读;常见问题是 SELinux 或文件权限锁死了dist/目录 - 构建命令必须带输出目录,例如:
php bin/satis build satis.json dist,漏掉dist参数会导致文件生成到错误位置
require-all: true 和 require: {} 混用会出什么问题
这两个字段互斥,混用会导致 Satis 构建时跳过部分包,下游安装直接报 Could not find package xxx,但错误信息完全不提示配置冲突。
-
"require-all": true表示:把repositories列表里所有仓库的所有稳定 tag 全部拉下来(适合全量同步公开包) -
"require": {"vendor/package": "*"}表示:只拉指定包的满足版本约束的 tag(适合精准控制私有包) - 如果同时存在,Satis 会优先按
require执行,require-all被忽略,但不会警告——你以为全量同步了,其实只同步了白名单里的几个 - 私有包依赖其他私有包?那个被依赖的包也必须出现在
repositories列表里,否则require-dependencies: true也拉不到
团队怎么无缝切换到私有源而不改每个项目
靠全局 repositories 配置,而不是挨个改 composer.json。执行:
composer config -g repositories.packages.type composer<br>composer config -g repositories.packages.url "https://pkgs.internal/"
这会在 ~/.composer/config.json 中写入仓库定义,并自动降级处理 packagist.org(即不 fallback)。但要注意:
- 这个方式下,
repo.packagist字段仍需设为内网地址,否则 Composer 8+ 会先尝试连外网再 fallback,浪费时间甚至触发防火墙告警 - 如果私有源用 HTTP,必须同步执行:
composer config -g secure-http false - Satis 不自动更新——新 tag 推上去后,必须手动或通过 CI 触发
satis build,否则下游永远看不到新版;这点最容易被当成“镜像没生效”反复排查










