离线使用composer必须提前在联网机完成依赖固化、元数据生成和缓存落地,否则install会报“could not fetch”或“package not found”;三前提缺一不可:已安装校验过的composer.phar、存在完整未改的composer.lock、vendor目录为空或已清空。

离线使用 Composer 不是“关掉网络就能跑”,而是必须提前在联网机完成依赖固化、元数据生成和缓存落地——否则 composer install 会直接报 Could not fetch 或 Package not found,不是超时,是根本没走本地逻辑。
离线安装前必须确认的三件事
缺一不可,否则后续所有操作都会失败:
- 目标机器已装好
composer.phar(不是用apt install composer,得手动下载校验后拷贝) - 项目根目录下存在完整、未被修改的
composer.lock(含每个包的dist.shasum和dist.url) -
vendor/目录为空或已被清空(残留旧包会导致 autoload 冲突或路径硬编码错误)
为什么 COMPOSER_DISABLE_NETWORK=1 有时仍报错
这个环境变量只禁用网络请求,但不解决元数据缺失问题。如果 composer.lock 里某个包的 version 是 dev-main 或 dev-master,Composer 在离线时无法解析该版本约束——它需要 Git 分支信息或远程标签,而这些不会写进 lock 文件。
实操建议:
- 联网机执行
composer update --lock强制将所有dev-版本转为具体语义化版本(如2.10.0) - 检查
composer.json中是否含"minimum-stability": "dev",删掉或设为"stable" - 确保
composer.lock的content-hash与当前composer.json一致(换行符、空格都影响)
离线添加新包的唯一可靠方式:path 仓库
composer require 默认必须联网查包名和版本,离线不可用。想加新包,只能让 Composer 把本地目录当仓库用。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
步骤如下:
- 把目标包(含完整
composer.json)放到项目内,如./packages/my-utils - 在项目根目录的
composer.json中添加:"repositories": [ { "type": "path", "url": "./packages/my-utils" } ] - 运行
composer require vendor/my-utils:dev-main(注意必须用dev-分支名,path 仓库不认^1.0这类约束) - 装完立刻执行
composer dump-autoload,否则autoload.php不会包含该包
⚠️ 容易踩的坑:url 必须是相对路径;包名必须和其 composer.json 中的 "name" 完全一致;子依赖也得用同样方式提供,否则安装中断。
vendor 目录能不能直接拷贝?能,但有条件
能跨机器复制 vendor/,但不能跨平台乱拷。Windows 上生成的 vendor/composer/autoload_static.php 会写入绝对路径,Linux 下直接 require 就报 failed to open stream。
安全做法:
- 在源机用
composer install --no-dev --optimize-autoloader生成优化版 autoload - 只拷
vendor/和composer.lock,别拷composer.json - 目标机执行
composer install --no-dev --ignore-platform-reqs(跳过 PHP 版本/扩展检查,前提是真兼容) - 若 PHP 小版本不一致(如 8.1.10 vs 8.1.12),务必在
composer.json中补"platform"配置,否则仍可能 fallback 到联网检测
最省事也最稳的方案,始终是:联网机打包 vendor/ + composer.lock,离线机只跑 composer install —— 其他任何“捷径”都在赌环境一致性。










