必须在composer.json根节点显式设"packagist.org": false禁用默认源,repositories数组首项配中文镜像(type为composer、url末尾带/),后续项按需添加私有仓库(type为composer或vcs),并确保auth.json权限600且路径正确。

composer.json 里怎么同时配中文镜像和私有仓库
不能只改 repositories 数组,必须分层处理:中文镜像接管 Packagist 元数据,私有仓库单独声明,且两者顺序和隔离逻辑不同。否则 Composer 会优先走中文镜像查包,但私有包根本不在那里,结果还是报 Could not find package。
正确做法是:
- 在
composer.json根节点加"packagist.org": false(不是放在repositories里),彻底关掉默认源 -
repositories数组第一项放中文镜像(如阿里云),type必须为"composer",url末尾带/,例如"https://mirrors.aliyun.com/composer/" - 第二项起放私有仓库,每项
type根据场景选:"composer"(Satis 静态源)或"vcs"(GitLab/GitHub 直连) - 私有仓库 URL 必须可直接访问;如果是
vcs类型,认证走auth.json,不写在composer.json里
为什么 composer install 还是去连 packagist.org
90% 是因为没执行这一步:composer config -g repo.packagist 查出来还是官方地址。项目级的 repositories 配置只影响元数据发现阶段,但 Composer 2.x+ 默认仍把 packagist.org 当硬编码 fallback 源,除非你显式用全局配置覆盖它。
排查和修复步骤:
- 运行
composer config -g repo.packagist,确认输出不是{"type": "composer", "url": "https://repo.packagist.org"} - 如果是,立刻执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI/CD 构建机必须同样执行该命令——项目级
composer.json的repositories对它无效 - 如果用的是 Satis 静态源,
url要指向你的packages.json所在路径,比如https://satis.internal/,而不是https://satis.internal/packages.json
私有包装上了却 Class not found 怎么办
镜像配置只解决「下载」,autoload 是另一件事。即使 vendor/acme/internal/ 目录存在,vendor/autoload.php 也不知道该加载哪些命名空间。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
关键检查点:
- 私有包自己的
composer.json是否含有效autoload块,比如"psr-4": {"Acme\Internal\": "src/"} - 若私有包没
composer.json(如 ZIP 归档),必须在项目级composer.json补"autoload": {"classmap": ["vendor/acme/internal/src/"]} - 每次改完 autoload,必须手动运行
composer dump-autoload,否则变更不生效 - 注意命名空间斜杠是双反斜杠
\,不是单斜杠/,PHP 自动加载器严格区分
auth.json 权限和位置错在哪
HTTPS 认证失败几乎从不报错,而是静默跳过读取,最终表现为 401 Unauthorized 或 could not fetch。问题不在 token 本身,而在 auth.json 文件是否被 Composer 真正加载。
必须满足三个条件:
- 文件路径必须是全局配置目录:
~/.composer/auth.json(Linux/macOS)或%APPDATA%Composeruth.json(Windows) - Linux/macOS 下权限必须是
600:chmod 600 ~/.composer/auth.json,否则 Composer 直接忽略 - JSON 结构要扁平:
{"http-basic": {"gitlab.example.com": {"username": "gitlab-ci-token", "password": "glpat-xxx"}}},不能嵌套在其他字段下 - 域名填
gitlab.example.com,不是完整 URL;token 权限要包含read_repository(GitLab)或repo(GitHub)
最常被忽略的是权限和路径——哪怕 token 完全正确,只要 auth.json 放错地方或权限不对,Composer 就当它不存在。










