composer无仓库白名单机制,本质是禁用默认源(repo.packagist false)后显式声明可信仓库;键名必须为repo.packagist,repo.packagist.org无效;关默认源后仅查已声明仓库,包不在其中则报错。

Composer 没有“仓库白名单”配置项,所谓白名单,本质是禁用默认源 + 显式声明可信仓库的组合操作。直接加几个镜像地址却不关默认源,等于没限制。
为什么 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": "mycorp/utils", "version": "1.2.0", "dist": { "url": "https://artifacts.mycorp.com/utils-1.2.0.zip", "type": "zip" } } } ] }
插件也要白名单:config.allow-plugins 必须显式声明
Composer 2.2+ 默认禁用所有第三方插件,且不支持全局配置。白名单只认当前项目 composer.json 顶层的 config.allow-plugins 字段。
- 键名必须与插件包
name字段完全一致(如"phpstan/extension-installer": true),大小写敏感 - 填错常见原因:漏掉 vendor 前缀、混淆类名与包名、复制了 require 中的别名
- 查真实插件名最准的方式:
composer show --plugins - CI/CD 环境中要注意:白名单不记录在
composer.lock,每次composer install都重新读取,版本不一致或--no-plugins参数都会导致失败
真正容易被忽略的是顺序和作用域:repositories 数组从上到下扫描,repo.packagist 开关仅全局生效,而 allow-plugins 只对 root package 生效。这三个控制点各自独立,缺一不可,且不能靠“大概齐”配置蒙混过关。










