全局换源没生效是因为项目composer.json中存在repositories字段,会完全覆盖全局配置;验证需运行composer config --list(不带-g)查看实际生效的源。

全局换源命令为什么没生效
执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 后,composer install 仍卡在 packagist.org,大概率是项目 composer.json 里显式写了 repositories 数组——它会**完全替换**全局设置,不是追加或 fallback。
常见错误现象:
-
composer config -g -l显示镜像已切到阿里云,但项目中composer install还是走官方源 - CI 流水线里依赖下载超时,本地却正常 → 项目级
repositories覆盖了全局配置
验证方式:运行 composer config --list(不带 -g),看输出里 repositories 的实际内容。只要项目 composer.json 有 "repositories" 字段,全局的 repo.packagist 就彻底失效。
项目里写 repositories 怎么保证私仓优先
私有包(比如内部 SDK)必须出现在 repositories 数组最前面,否则会被 packagist 镜像“截胡”。Composer 查包时是严格按数组顺序逐个请求,**第一个返回有效元数据的源就立刻锁定,后续源完全不查**。
正确写法示例(放在 composer.json 的 repositories 顶部):
"repositories": [
{
"type": "composer",
"url": "https://pkg.internal/"
},
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
关键点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 禁用官方源必须显式写
{"packagist.org": false},只靠把镜像放第一行不够 - 别用
type: "package"兜底全部包,它不支持版本发现,极易回退到 packagist - 如果项目不需要私仓,就别写
repositories字段——让全局镜像自然生效
想临时绕过项目配置用全局源怎么办
某些 CI 场景需要强制走全局镜像(比如统一 cache-dir 或跳过私仓认证),又不能改项目 composer.json。这时候不能删字段或硬改 JSON,得用环境变量控制加载路径。
推荐做法:
- 建一个最小化配置文件
ci-composer.json,内容只保留:{"config": {"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}]}} - 执行:
COMPOSER=ci-composer.json composer install - 避免用
COMPOSER=/dev/null:它会跳过 autoload、scripts 等整个项目逻辑,仅适合调试 config 本身
注意:composer config --global 修改后,已有项目不会自动更新,必须重新运行 composer install 或 update 才会应用新源。
bin-dir 和 vendor-dir 路径冲突导致脚本不生成
项目里配了 "bin-dir": "bin",但 vendor/bin 下始终没生成可执行脚本?很可能是 bin-dir 路径校验失败——Composer 要求 bin-dir 必须是绝对路径,或位于 vendor-dir 目录内,否则会静默回退到默认的 vendor/bin。
典型问题:
-
"vendor-dir": "lib/vendor"+"bin-dir": "bin"→bin不在lib/vendor下,被忽略 -
"bin-dir": "/usr/local/bin"是绝对路径,但和vendor-dir无关,也会被静默丢弃 - 想用项目级
bin目录,就得写成"bin-dir": "lib/vendor/bin"或直接用绝对路径(如/var/www/project/bin)
验证方法:运行 composer config bin-dir,看输出是否和你预期一致;再检查 vendor/bin 是否存在且有执行权限。

















