Composer 不存在 --no-api 参数,因其元数据解析必须依赖 GitHub/Packagist API;解决限流应配置 github-oauth 全局 token,或使用离线模式与本地 artifact 仓库。

Composer 没有 --no-api 参数,也不存在“禁用 API 下载”的官方配置项。 所有声称通过该参数跳过 GitHub API 的做法,都是对 Composer 工作机制的误解。
为什么 --no-api 根本不存在?
Composer 的包元数据获取和 ZIP 下载是两个分离但强耦合的阶段:前者必须走 API(如 GitHub API)查版本、tag、commit hash;后者才决定用 dist(ZIP)还是 source(git clone)。没有 API,Composer 就无法知道该下载哪个版本的 ZIP——composer.json 里写的 "monolog/monolog": "^3.0" 不是具体 URL,而是一个约束表达式,求解它必须依赖 Packagist 或 GitHub 的索引服务。
你执行 composer install 时看到的 “Downloading xxx.zip” 日志,是 API 查询完成后的结果,不是绕开 API 的证据。
-
--no-api不在 Composer 源码的任何命令解析逻辑中(截至 v2.7.x) - 所有 CLI 参数都以
--开头且被明确定义,composer --help输出里查不到该选项 - 试图传入会直接报错:
Unrecognized option: --no-api
真正想绕开 API 的人,通常遇到的是这个错误
“API rate limit exceeded for xxx.xxx.xxx” 或 “403 rate limit exceeded” —— 这不是因为 Composer 多次调用 API,而是因为你没带认证凭据,被 GitHub 限流了。解决路径非常明确:
- 生成 GitHub Personal Access Token(PAT),勾选
read:packages和public_repo(私有库加read:private_repo) - 全局写入:
composer config -g github-oauth.github.com <your_token_here> - 验证是否生效:
composer config -g github-oauth.github.com应输出 token 前缀 - CI 环境务必用 secrets 注入,禁止硬编码或提交到
auth.json
这不是“禁用 API”,而是让 API 请求从每小时 60 次提升到 5000 次,问题自然消失。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如果真想彻底不走远程 API,只有这两个合法路径
它们都不叫“禁用 API”,而是改变元数据来源方式:
-
离线模式:提前运行
composer update --no-install生成完整composer.lock,再在无网环境执行composer install --no-scripts --no-plugins。此时所有包版本、URL、校验和全来自 lock 文件,不发任何 HTTP 请求 -
本地仓库 + dist 包预置:用
repositories配置 typepackage或artifact,把 ZIP 文件放在本地目录,然后在require中声明精确版本。Composer 会直接从本地路径复制,跳过所有远程查询
注意:artifact 仓库只支持 ZIP/TAR,且要求包内含有效 composer.json;package 类型需手动补全 autoload、dist、version 等字段,维护成本高。
别碰这些危险操作
有人尝试改源码注释掉 GitHubDriver、伪造 RepositoryManager 返回空结果、或用 COMPOSER_NO_INTERACTION=1 伪装静默——这些要么导致依赖解析失败,要么破坏 lock 文件一致性,上线后必出问题。
最常被忽略的一点:github-oauth 必须配在 全局(-g),项目级 auth.json 只管下载 ZIP,不管元数据查询。这点在 CI 流水线里尤其容易踩空。

















