真正安全的 Composer 配置需强制 HTTPS、启用官方签名验证、仅用可信镜像代理元数据;仅换镜像源会跳过签名校验,导致供应链投毒风险。

Composer 没有“仓库白名单”配置项,所谓白名单,本质是禁用默认源 + 显式声明可信仓库的组合操作。 直接在 repositories 里加几个镜像地址,不关掉默认源,就等于没限制——Composer 仍会从 packagist.org 全量索引包,你的私仓或镜像只是多一条 fallback 路径而已。
为什么 repo.packagist.org 配置无效
Composer v2+ 对内置源标识符校验极严:repo.packagist 是唯一合法键名,repo.packagist.org 会被当成普通自定义仓库,完全无法接管默认行为。
- 错误写法:
composer config -g repositories.packagist.org url https://mirrors.tuna.tsinghua.edu.cn/composer/→ 该仓库不会替代默认源 - 正确流程:先执行
composer config -g repo.packagist false彻底关闭默认源;再用repositories.xxx显式添加替代项,例如composer config -g repositories.aliyun type composer和composer config -g repositories.aliyun url https://mirrors.aliyun.com/composer/ - 验证是否生效:
composer config -g -l | grep repositories应同时显示repo.packagist=false和你定义的repositories.*条目
require 的包找不到?不是配置漏了,是包根本不在你声明的仓库里
关掉默认源后,Composer 不会自动探测包归属,也不会 fallback 到未声明的源。它只查你 repositories 里明确列出的那些地址。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查包在哪:打开
https://packagist.org/packages/vendor/name,看右上角 “Source” 是否指向 GitHub/GitLab —— 如果是,说明它只存在于 packagist.org,必须手动加回官方源 - 临时解决:
composer require vendor/name --repository=https://packagist.org(单次绕过) - 长期方案:为该包所在组织加镜像源,比如 VuePress 用户应加
repositories.vuepress type composer+ 对应镜像 URL - 注意环境变量:
COMPOSER_REPO_PACKAGIST会完全覆盖默认源设置,务必确认未被设值
私有包怎么只让某个仓库提供?必须用 "type": "package"
想让私仓只提供 myorg/foo 和 myorg/bar,其他包一律不可见?别用 type: composer 或 type: vcs——它们会全量扫描 packages.json,导致泛匹配风险。
- 唯一可靠方式:把私仓声明为
"type": "package",并为每个实际提供的包显式写出name、version、dist字段 - 多个包就写多个条目,全部放在
repositories数组最前面,确保优先级最高 - 示例片段:
"repositories": [ { "type": "package", "package": { "name": "myorg/foo", "version": "1.0.0", "dist": { "url": "https://example.com/dist/foo-1.0.0.zip", "type": "zip", "shasum": "a1b2c3..." } } } ] - 关键点:Composer 不会自动发现包,也不支持通配符;漏写一个版本,
composer require myorg/foo:1.0.0就会失败
真正难的不是写几行配置,而是厘清「谁在控制包可见性」:是 repositories 列表顺序?是 repo.packagist 开关?还是包自身是否出现在某个 packages.json 里?三者缺一不可。一旦混用 type: composer 私仓和 type: package 条目,优先级逻辑就会变得难以预测。

















