离线环境用 composer 安装依赖,核心是确保 composer install --no-network 不报错:必须存在有效 composer.lock,提前在联网机缓存完整 dist zip 包并校验 shasum 一致,离线机配置绝对路径本地仓库、赋予读权限,并严格使用 --no-network --prefer-dist --no-scripts --no-plugins 命令。

离线环境用 Composer 安装依赖,核心不是“怎么运行命令”,而是“如何让 composer install --no-network 不报错”。 一旦你漏掉 composer.lock 或 ZIP 文件的 shasum 不匹配,哪怕路径全对,也会卡在 installing package x 然后静默失败——它不会告诉你哪一步错了,只会退出。
联网机上必须提前生成并验证完整的 dist 包缓存
这步不能跳,也不能靠 composer install --no-install 混过去。它只解析依赖树,不下载任何文件,而离线安装依赖的是 .zip 归档(即 dist 类型),不是源码(source)。
- 确保项目根目录存在有效的
composer.lock(由composer update或上一次成功composer install生成) - 运行
composer install --prefer-dist --no-scripts --no-plugins:强制下载所有distZIP,并跳过可能因缺少扩展而失败的脚本 - 检查 ZIP 是否真被缓存:进入
~/.composer/cache/files/,确认每个包名对应子目录下有.zip文件,且大小明显 >0KB - 手动校验一个包的
shasum:比如sha256sum ~/.composer/cache/files/monolog/monolog/abc123.zip,再和composer.lock中对应项的dist.shasum字段比对,必须完全一致
离线机上配置本地仓库时,路径必须是绝对路径且可读
Composer 对相对路径、符号链接、用户权限极其敏感。写成 "url": "../my-cache" 或 "url": "./cache" 都会静默忽略该仓库,最终 fallback 到网络请求并报错 Could not fetch ...。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 把整个
~/.composer/cache/files/目录复制到离线机固定位置,例如/opt/composer-offline-cache - 在项目
composer.json中添加仓库配置,url必须是绝对路径:{"repositories": [{"type": "path", "url": "/opt/composer-offline-cache"}]} - 确保运行
composer install的用户对/opt/composer-offline-cache有读取权限(sudo chmod -R a+r /opt/composer-offline-cache) - 不要加
"packagist.org": false—— 它只禁用 packagist 主站,不影响本地path仓库;但若误加了"packagist": false(少个 .org),会导致所有仓库失效
执行离线安装时,必须显式禁用网络并指定 dist 优先
--no-network 是硬性开关,不是可选项。漏掉它,Composer 会在找不到本地包时自动尝试回退到网络,而你的离线机根本连不上,结果就是超时或 SSL 错误,掩盖真实问题。
- 使用完整命令:
composer install --no-network --prefer-dist --no-scripts --no-plugins -
--prefer-dist强制使用 ZIP 包(你已准备好的),避免 Composer 尝试 clone git 仓库(这需要网络且失败更隐蔽) -
--no-scripts和--no-plugins防止因缺少扩展(如ext-zip或ext-curl)导致安装中途中断 - 如果仍失败,加
-v查看详细日志,重点关注Reading /opt/composer-offline-cache/xxx/yyy.zip是否出现——没这行,说明仓库没生效
最常被忽略的一点:离线机上的 PHP 版本、已启用扩展(尤其是 ext-zip 和 ext-openssl)必须和联网机制作环境一致。否则 ZIP 解压失败或 HTTPS 校验绕不过,错误信息却藏在 silent 模式里,只能靠 php -m | grep -E 'zip|openssl' 手动确认。










