根本原因是composer仍fallback至repo.packagist.org,须执行composer config --global repo.packagist false禁用官方源,并用composer config --global repos确认仅保留本地源。

composer install 报 Could not fetch packages.json 是仓库没切干净
离线环境下最常卡在这一步,根本原因不是网络不通,而是 Composer 还在尝试访问 repo.packagist.org。即使你加了本地 repositories,只要全局配置里还留着默认源,它就会 fallback 校验。
必须执行这两步清空动作:
-
composer config --global repo.packagist false—— 彻底禁用 packagist 官方源,不能只删composer.json里的repositories -
composer config --global repos—— 检查输出是否只含你刚加的本地源(如packages),若还有其他项,逐个用composer config --global --unset repos.xxx删除
注意:repo.packagist false 和 repos.packages composer http://localhost:8000 是两回事,前者关总开关,后者开新入口,缺一不可。
本地 HTTP 镜像服务返回 404 或空内容
用 curl http://localhost:8000/packages.json 能通 ≠ 镜像就可用。Satis 构建后生成的 web/ 目录必须直接作为 Web 根目录暴露,不能套多一层路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 错误示例:
python3 -m http.server 8000启动后,web/packages.json实际 URL 是http://localhost:8000/web/packages.json—— 这会导致 Composer 请求/packages.json却收到 404 - 正确做法:进入
web/目录再起服务,或用 Nginx 将 root 指向web/,确保/packages.json可直访 - 验证要点:打开浏览器访问
http://localhost:8000/packages.json,应看到 JSON 对象;再试http://localhost:8000/provider-laravel~framework.json,也得有内容(否则装 Laravel 会失败)
vendor 已存在却仍报错 Class not found
这不是 autoload 失效,而是 composer install 在离线模式下跳过了 autoloader 重建,但运行时又依赖它 —— 中间断层了。
- 必须补上:
composer dump-autoload -o,且不能加--no-autoloader(那个参数只用于 install 阶段跳过) - 如果项目用了
"classmap-authoritative": true,要确认vendor/composer/autoload_classmap.php文件真实存在且非空;否则 PHP require 时找不到类定义 - 检查
vendor/autoload.php是否被修改过(比如被 IDE 自动格式化删了末尾换行),这种微小损坏会导致整个加载链崩掉
离线机执行 composer require 报 Could not find package
composer require 在离线环境天然不可用 —— 它设计上就必须联网解析包名、版本、依赖树。试图让它工作是方向性错误。
- 唯一合法离线加包方式:用
path类型仓库 + 手动composer require vendor/name:dev-main - 关键前提:本地包目录下必须有完整
composer.json,含"name"、"version"(或分支名如"dev-main"),且repositories的url必须是相对路径(如"./packages/mylib"),绝对路径在 Windows 上容易因斜杠解析失败 - 别信“先
composer init再require”——init 不联网,但 require 一定连,这步永远过不去
真正难排查的点往往藏在路径权限和符号链接里:Docker 容器挂载的 web/ 目录若被设为只读,HTTP 服务能启但返回空;path 仓库在 vendor 下生成的软链接若指向已删除的父目录,composer install 不报错,但运行时 require 找不到文件。










