离线环境下 composer 正常运行的关键是确保所有依赖包 zip 文件存在且哈希匹配,而非单纯禁用网络;必须用 artifact 或 composer 类型本地仓库覆盖 lock 文件中的远程 dist.url,并将仓库置于 repositories 数组首位,同时保持 composer.lock 原始完整性。

离线环境下 Composer 能正常运行,前提是它“认为”自己能访问包源——这不靠真实联网,而靠提前准备好的本地 ZIP 包 + 正确的仓库配置。核心不是禁用网络,而是让 composer install 在解析 composer.lock 后,能从本地路径直接命中每个包的 dist.url 和校验 dist.shasum。
怎么让 Composer 完全跳过网络请求
关键不是加 --no-network(它只是报错提示,不改变行为),而是确保所有依赖都能在本地缓存或 artifact 仓库中被找到。一旦某个包的 ZIP 文件缺失或哈希不匹配,Composer 就会尝试 fallback 到网络,然后失败。
-
--no-network是“断网保护开关”,只防止意外回源;它不解决“找不到包”的根本问题 - 真正起效的是:把
~/.composer/cache/files/下完整 ZIP 目录复制到离线机,并用composer config --global cache-files-dir /path/to/local/cache指向它 - 如果用
artifact仓库(即"type": "artifact"),必须把所有 ZIP 放进一个扁平目录(不能嵌套子目录),且文件名需严格匹配vendor-name/package-name-version.zip - 运行
composer install --no-dev -o前,先执行composer diagnose看是否报cache directory is not writable或Could not find package ... in a package repository
为什么配置了本地仓库还是报 “Package not found”
常见原因是 composer.lock 里记录的 dist.url 仍是 https://api.github.com/... 这类远程地址,而你配的本地仓库没覆盖它——Composer 优先按 lock 文件里的 URL 去找,不是先查仓库列表。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须用
"type": "artifact"或"type": "composer"配置,并确保该仓库在composer.json的repositories数组里排在第一位(Composer 按顺序查找) - 若用
"type": "composer",仓库根目录下必须有packages.json,且其中packages字段要包含你项目所需的所有包名+版本+shasum - Satis 生成的镜像默认满足这点;但手动拼的
packages.json极易漏掉子依赖(如psr/container被symfony/dependency-injection引用) - 验证方式:运行
composer show monolog/monolog,看输出的dist行是否显示本地路径或zip文件名,而不是https://
artifact 仓库和 composer 镜像仓库的区别与选型
两者都支持离线,但适用场景不同:artifact 适合小范围、固定包列表的部署;composer 镜像(如 Satis)适合需要动态增删包、或依赖树较深的项目。
-
"type": "artifact":只认 ZIP 文件,不解析依赖关系;composer install会逐个检查composer.lock中每个包的 ZIP 是否存在且 shasum 匹配;不支持require-dev包自动过滤,得手动剔除 -
"type": "composer"(Satis 镜像):含完整元数据,支持--no-dev、require-dev自动跳过、版本约束解析;但构建成本高,需提前跑satis build - 性能差异:artifact 无网络、无 HTTP 请求,启动快;Satis 镜像需读取
packages.json,首次解析稍慢,但后续操作更稳定 - Windows 用户注意:
artifact路径要用正斜杠或双反斜杠,例如"url": "file:///C:/composer-cache/",单反斜杠会被 PHP 解析为转义字符
最易被忽略的一点:离线环境里 composer.lock 不是“可选附件”,而是唯一可信源。任何手动修改(比如改 version、删包、调换顺序)都会导致 shasum 校验失败,进而触发网络回退——而这时网络又不通,最终卡死。别碰 lock 文件,只让它被 composer install 读取。










