必须显式禁用 packagist.org 才能使镜像生效,仅配置镜像地址而不加 {"packagist.org": false} 会导致 composer 同时请求官方源与镜像源,引发 fallback、版本冲突或包找不到;正确写法是将 {"packagist.org": false} 置于 repositories 数组首位,再添加镜像仓库。

镜像配置必须显式禁用 packagist.org 才生效
不加 {"packagist.org": false},哪怕写了国内镜像地址,Composer 仍会 fallback 到官方源查包——这不是“没生效”,而是两个源同时参与请求,优先级混乱。常见现象是 Could not find package xxx 或版本解析失败。
正确写法是把 {"packagist.org": false} 放在 repositories 数组首位,再跟镜像仓库:
{
"repositories": [
{"packagist.org": false},
{"type": "composer", "url": "https://mirrors.aliyun.com/composer"}
],
"require": {}
}
-
url末尾不能带/,否则返回 404(如https://mirrors.aliyun.com/composer/❌) - 镜像地址必须是完整 HTTPS URL;若用 HTTP,需额外加
"secure-http": false - 改完后必须运行
composer clear-cache,composer update --no-cache不够用
想让某个包走私有源或特定镜像,不能只靠 --repository-url
composer require vendor/package --repository-url https://xxx 只替换元数据获取地址,但 Composer 仍按原始包名去原源匹配版本。如果私有源里没有这个包,或者版本未同步,就会直接报错或 fallback。
真正生效的方式只有两种:
- 在
repositories中声明一个type: "package"仓库,手动列出该包的name、version和dist字段(适合私有包、dev分支等不可见于公共索引的场景) - 在
repositories中声明type: "composer"镜像,并确保该镜像已同步目标包(比如阿里云镜像已包含topthink/framework) -
require中必须显式写全包名,且与repositories中声明的name完全一致(大小写、vendor 名都不能错)
处理依赖链里的 dev 版本要小心稳定性设置
如果 A 包依赖 "vendor/b": "dev-main",而你的项目没允许 dev 稳定性,composer install 会卡住或报错——不是网络问题,是 Composer 主动拒绝加载。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
推荐做法不是全局设 minimum-stability: dev,而是精准控制:
- 对单个包用
@dev后缀:"vendor/b": "dev-main@dev" - 用 inline alias 映射版本:
"vendor/b": "dev-main as 2.1.0",让依赖解析能对上其他包的约束
验证是否真走镜像源,须看 composer update -vvv 日志中所有 p2/ 请求域名——这才是唯一可信依据。
私有包分发必须打合规 Git tag,不能只靠 dev-main
私有共用库不能靠“直接 require Git 地址”硬上,必须走 repositories + tag + 稳定性约束三件套,否则 dev-main 会导致 CI 不可重现、版本错乱。
-
repositories必须写在项目根目录的composer.json顶层,类型必须是"vcs"(不是"git"、"package") - URL 填完整克隆地址,例如
"https://gitlab.example.com/acme/auth-contract",结尾不加.git - 必须打合法 Git tag,如
git tag -a v1.0.0 -m "release" && git push --tags - 确需临时用分支,必须加别名:
composer require acme/auth-contract:dev-main as 1.0.x-dev
真正难的不是配置,而是团队协作节奏:每个共用库的 name 字段必须统一规范,每个 tag 都得人工校验是否破坏契约。










