必须用type为"composer"且url指向satis服务,漏掉"packagist.org": false或packages.json未包含目标包会导致静默跳过;auth.json需600权限并正确配置http basic认证。

composer config repositories 怎么加 Satis 私有源
必须用 type 为 "composer",不能写成 "vcs" 或漏掉 url。Satis 服务返回的是完整 packages.json 索引,不是 Git 仓库,填错类型会导致 Composer 尝试 git clone 一个 HTML 页面,报错 Could not find package。
composer config repositories.0.type composercomposer config repositories.0.url https://satis.your-company.com- 不要用
composer config -g全局加——它会被项目级composer.json覆盖,且无法绑定认证凭据 - 执行后运行
composer config repositories确认输出是数组,不是对象(键值对会丢掉前面的源)
为什么加了 Satis 源却还是走 packagist.org
根本原因只有两个:"packagist.org": false 缺失,或 Satis 的 packages.json 里压根没声明你要的包。Composer 不 fallback,不提示,只静默跳过私有源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查 Satis 服务是否生成了目标包:运行
curl -s https://satis.your-company.com/packages.json | jq '.packages["myorg/utils"]',必须返回非空对象 -
"packagist.org": false必须是repositories数组里的**独立对象**,放在 Satis 源之后、数组末尾,不能嵌在 Satis 对象里 - 如果还要装
monolog/monolog这类公共包,得手动加回官方源:{"type":"composer","url":"https://packagist.org"},并确保它在"packagist.org": false之后
auth.json 怎么配 Satis 的 HTTP Basic 认证
认证信息绝不能写进 composer.json,必须分离到 auth.json。Composer 会自动读取项目根目录下的 auth.json,无需额外命令。
- 创建
auth.json(与composer.json同级):
{
"http-basic": {
"satis.your-company.com": {
"username": "deploy",
"password": "xxx"
}
}
}
600(chmod 600 auth.json),否则 Composer 会忽略该文件"bearer" 字段下,格式同上composer require myorg/utils -v,日志里应出现 Reading composer.json of myorg/utils 及对应 Satis 域名的 GET 请求多源混配时镜像和 Satis 的顺序怎么排
镜像(如阿里云)本质是 packagist.org 的只读代理,不托管私有包。混配失败的主因是把镜像当“加速层”塞在 Satis 前面,结果私有包查不到,公共包又绕过镜像直连慢速官方源。
- 正确顺序:Satis 私有源 → 镜像源(
type: "composer",url换成镜像地址)→ 官方源(兜底)→{"packagist.org": false}(禁用隐式兜底) - 错误写法:
{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}放在 Satis 前面 → Composer 先查镜像,发现没有myorg/utils就报错,根本不看 Satis - 镜像源的
type必须是"composer",不是"packagist"(后者已废弃,部分版本会忽略) - 所有源都必须用索引数组,不能写成
{"satis":{...},"mirror":{...}}—— 后者只保留最后一个
auth.json 文件权限是否正确、以及 "packagist.org": false 这个开关有没有被当成普通仓库对象塞错位置。










