composer离线需设composer_disable_network=1,否则install必联网校验;vendor存在仍报错因元数据检查不可跳过;最稳命令是composer_disable_network=1 composer install --no-plugins --no-scripts --no-autoloader,之后补dump-autoload。

围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer install 在无网络环境下根本不会自动“离线”,它默认会尝试访问 https://repo.packagist.org/packages.json,哪怕 vendor/ 目录已经存在、composer.lock 也完整。所谓“中文离线模式”并不存在——Composer 没有语言相关的离线开关,只有行为控制逻辑。
为什么 vendor 存在还报 “Package not found”
这是最常被误解的点:错误不是因为文件缺失,而是 Composer 在install 阶段仍要校验远程元数据(比如包是否存在、版本是否合法),这个请求无法跳过,除非显式切断网络通路。
-
COMPOSER_DISABLE_NETWORK=1是硬性前提,不设它,所有--no-xxx参数都无效 - 若
composer.lock中某包的dist.url是https://开头,且没配本地仓库,COMPOSER_DISABLE_NETWORK=1下会直接退出,不是静默忽略 - 检查是否真断网:临时加
127.0.0.1 packagist.org到/etc/hosts,再跑composer install -v,看到Connection refused才算到位
最稳命令组合:COMPOSER_DISABLE_NETWORK=1 + 三 no
目标机上执行这行命令,前提是已有完整vendor/ 和未改动的 composer.lock:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader
-
--no-plugins:跳过插件初始化,避免phpstan/extension-installer等隐式联网 -
--no-scripts:屏蔽post-install-cmd,防止脚本调用外部 API 或生成配置 -
--no-autoloader:绕过 autoload 重建阶段,某些自定义实现会触发远程类查找(极少见但真实存在)
composer dump-autoload -o,否则运行时大概率报 Class not found。
离线添加新包只能靠 path 仓库
composer require 默认必须联网查包名和版本,离线不可用。唯一可靠方式是把本地目录当仓库用:
- 把目标包(含完整
composer.json)放到项目内,如./packages/my-utils - 在项目根目录
composer.json中添加:"repositories": [{"type":"path","url":"./packages/my-utils"}] - 运行
composer require vendor/my-utils:dev-main(注意必须用dev-main这类分支名,path仓库不认^1.0约束) - 装完立刻执行
composer dump-autoload,否则autoload.php不包含该包
url 必须是相对路径;包名必须和其 composer.json 中的 "name" 完全一致;子依赖也得用同样方式提供,否则安装中断。
复制 vendor 目录比跑 install 更可靠
如果你只是部署固定版本,别折腾install 命令。直接把外网机器上已验证可用的 vendor/ 和 composer.lock 整体拷到内网机:
- 确认 PHP 版本、必需扩展(
mbstring、openssl、zlib)完全一致 - 入口文件中显式
require '/opt/myapp/vendor/autoload.php';,不依赖当前工作目录 - 如果迁移后类找不到,先运行
composer dump-autoload --classmap-authoritative,不要立刻重装
composer.lock 的 content-hash 必须与当前 composer.json 严格一致(换行符、空格都影响),且不能含 "source" 类型条目(如 dev-master 或 Git URL),这类记录离线时无法解析。










