composer config repo.packagist 不能用于混合源场景,因其仅支持单个 composer 类型源且会覆盖已有配置;Drupal 项目需私有 Git 源、国内镜像、packagist.org 兜底三者共存,必须改用项目级 repositories 数组按 vcs→国内镜像→官方源严格排序,并在根节点设 "packagist.org": false。

composer config repo.packagist 不能用于混合源场景
这条命令只接受单个 composer 类型源,且会覆盖已有配置。你在 Drupal 项目里既要拉 acme/private-module(GitLab 私有仓库),又要走 https://mirrors.aliyun.com/composer/ 加速公共包,最后还得 fallback 到 packagist.org——repo.packagist 根本装不下这三者。
常见错误包括:执行两次 composer config -g repo.packagist composer ...,后一次直接干掉前一次;或误把 vcs 地址塞进这个字段,触发 Invalid repository type 报错。
正确做法是放弃全局 repo.packagist,改用项目级 repositories 数组,按优先级顺序声明来源。
repositories 数组必须显式声明 type 并严格排序
Composer 按数组顺序查找包,遇到第一个匹配就停,不会合并或兜底。顺序错了,私有包就永远拉不到。
- 私有 Git 源放第一位:
{"type": "vcs", "url": "https://gitlab.internal.acme.com/modules/private.git"}—— URL 必须是可git clone的地址,不是网页链接 - 国内镜像放第二位:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}—— 注意末尾/,少一个会拼出/composerpackages.json - 官方源放最后:
{"type": "composer", "url": "https://packagist.org/"}—— 仅作兜底,避免冷门包 404
同时必须在根节点加 "packagist.org": false,否则 Composer 仍会偷偷连官方源,哪怕前面都配对了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
端口转发后,URL 必须用局域网 IP + 显式端口
很多人在防火墙后用 SSH 端口转发(如 ssh -L 8000:192.168.10.5:80 user@jump-host),然后配 "url": "http://localhost:8000/" —— 其他机器根本解析不了 localhost,必然失败。
正确写法是直接用转发目标的真实局域网地址:"url": "http://192.168.10.5:8000/",并确保:
- Nginx/Apache 的
root指向 Satis 输出目录(如/var/www/satis/web) - 响应头含
Content-Type: application/json,否则 Composer 解析packages.json失败 - 防火墙放行该端口(不只是转发链路,服务端监听端口也得开)
验证是否真走转发后的私有源
别信配置写完就生效。三步快速验证:
- 运行
composer config -g repo.packagist,输出应为空或无效值(说明没干扰项目级配置) - 执行
composer install -vvv,第一行日志必须出现Downloading http://192.168.10.5:8000/packages.json,而不是packagist.org - 在私有源服务器上查 access log,确认有来自其他机器的
GET /packages.json请求 —— 没请求=客户端根本没发过去
最易被忽略的是:Satis 构建后不启动服务,只是生成静态文件;端口转发只解决网络可达性,但 Web 服务本身必须已运行且 MIME 类型正确,否则一切白搭。

















