离线机房必须设composer_disable_network=1,否则composer install必请求packages.json;artifact仓库最稳,需包名、composer.json字段、cache-files-dir路径三者shasum严格一致。

离线机房必须设 COMPOSER_DISABLE_NETWORK=1
不设这个环境变量,composer install 一定会尝试请求 https://repo.packagist.org/packages.json,哪怕 vendor/ 已存在、composer.lock 完整、缓存目录里全都是 zip 包——它根本不会读。这是 Composer 的硬性行为,不是 bug,也无法用 --offline 或配置项绕过。
验证是否生效:env | grep COMPOSER_DISABLE_NETWORK 必须输出 COMPOSER_DISABLE_NETWORK=1;Windows CMD 要写成 set COMPOSER_DISABLE_NETWORK=1 && composer install,PowerShell 需先 $env:COMPOSER_DISABLE_NETWORK="1" 再执行命令。
- 全局配置
repo.packagist false或删掉repositories里的 packagist 条目,只是辅助,不能替代该环境变量 -
--no-plugins --no-scripts --no-autoloader这些参数在没设COMPOSER_DISABLE_NETWORK=1时完全无效 - 如果项目
composer.json中有"type": "packagist"类型的仓库定义,即使值为false,也会直接报错退出
artifact 仓库是离线机房最稳的本地缓存方式
artifact 类型只读取本地 .zip 或 .tar.gz 文件,不做任何网络探测,也不校验远程元数据,适合部署场景。关键不在“怎么配”,而在“包怎么来”和“路径怎么对”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 包文件名必须严格为
vendor-name-package-name-version.zip(全部小写、中划线分隔、版本号不含v前缀),例如monolog-monolog-2.13.0.zip - 压缩包内根目录必须含
composer.json,且其中"name"和"version"字段要与文件名完全一致 - 所有包放在同一级目录下(如
/data/artifacts/),不要嵌套子目录;url值填绝对路径或相对路径均可,但必须可读 - 在
composer.json中配置:"repositories": [{"type": "artifact", "url": "/data/artifacts/"}],并显式禁用默认源:"packagist.org": false
缓存路径必须手动对齐 cache-files-dir
composer install --prefer-dist 离线时只从 cache-files-dir 目录找 zip 包,其他缓存子目录(如 repo/、archived/)断网即失效。联网机和离线机的该路径必须完全一致,且不能含中文或空格。
- 联网机上统一设为固定路径:
composer config --global cache-files-dir /data/composer-cache/files - 离线机同步前确认该路径存在、权限正确(Docker 容器需挂载对应 volume)
- 检查关键包是否存在:
find /data/composer-cache/files -name "*7a8e0d4b*.zip"(7a8e0d4b是composer.lock中某包dist.shasum的前 8 位) - 两端 Composer 主版本需一致(如都是 2.7.x),否则
files/下文件命名规则可能不兼容
别信 composer clear-cache,真清理要删 cache-files-dir
composer clear-cache 不清理 cache-files-dir 下的 zip 包,也不清 repo/ 里的元数据,更不保证重下 dist 文件。它对离线准备毫无帮助。
- 真正有效的是:删掉整个
cache-files-dir目录,再在联网机上跑一遍composer install --prefer-dist --no-dev - 离线机上执行前务必删掉
vendor/和composer.lock,再加--no-cache参数运行composer install,避免旧 lock 文件残留远程地址引用 - 如果
composer.lock中某个包是"source"类型(如 Git URL 或dev-master),离线时无法还原,install 必然失败——必须提前确保所有依赖走--prefer-dist
composer.lock 里的 dist.shasum、cache-files-dir 下的 zip 文件名、artifact 目录里的包文件名——三者哈希值必须一模一样,差一位就报 Package not found,不会 fallback,也不会提示缺哪个。










