无网络条件下 composer 能正常运行,但必须设 composer_disable_network=1 并执行 composer install --no-plugins --no-scripts --no-autoloader,再运行 composer dump-autoload -o;vendor 存在仍报错是因默认校验远程元数据,该行为无法跳过,除非切断网络通路并绕过高风险环节。

无网络条件下 Composer 能正常运行,但必须提前切断所有网络触发点——COMPOSER_DISABLE_NETWORK=1 是硬性开关,不设它,哪怕 vendor 和 lock 文件都齐全,composer install 仍会报 Could not fetch https://repo.packagist.org/packages.json。
必须先禁用全局 packagist 源
即使你配置了本地仓库,Composer 默认仍会 fallback 到 packagist.org。不彻底关掉,它会在解析阶段发起 DNS 查询或 HTTP 请求:
-
composer config --global repo.packagist false—— 这是唯一有效方式,false不是字符串而是布尔值,不能写成"false"或"https://packagist.org" - 检查是否生效:
composer config --global repo.packagist应输出空行;若显示composer https://packagist.org,说明没清干净 - 项目级配置也要清理:
composer config repo.packagist同样应为空;如果composer.json的repositories数组里还留着{"type": "packagist", "url": "https://packagist.org"},手动删掉
离线 install 必须带全防护参数
仅靠断网或删掉 repositories 不足以阻止 Composer 内部校验逻辑。以下参数组合缺一不可:
-
COMPOSER_DISABLE_NETWORK=1—— 环境变量必须前置,否则所有--no-xxx都被忽略 -
--no-plugins—— 防止插件(如phpstan/extension-installer)在初始化时尝试联网注册或校验 -
--no-scripts—— 屏蔽post-install-cmd,避免脚本调用外部 API、生成远程配置或触发 Webhook -
--no-autoloader—— 绕过 autoload 重建过程,某些自定义 autoloader 实现会尝试远程加载类映射
执行完后立刻补一记:composer dump-autoload -o,否则运行时大概率报 Class not found。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
vendor 存在仍失败?检查 source 类型包和 PHP 环境一致性
常见现象:vendor 目录完整、lock 文件未改,composer install 却直接退出或报错。原因通常有两个:
-
composer.lock中某个包的source类型字段非空(例如"type": "git"或"reference": "dev-master"),这类包无法离线校验,install 必然失败;解决办法是重生成 lock 文件时强制走 dist:composer update --prefer-dist --no-interaction(在联网机操作) - PHP 版本或扩展不一致:离线机必须有
mbstring、openssl、zlib,且版本号与生成 lock 文件时完全一致;否则composer install会在解析约束时因版本不匹配而终止 - 若项目用了私有包,别用 VCS 仓库,改用
path类型,并确保路径可移植(如./packages/my-lib),且 require 时加@dev后缀
artifact 仓库是最稳的纯离线方案
比缓存复用或 vendor 打包更可靠,因为不依赖任何外部状态,只读本地 tar.gz:
- 包命名必须严格为
vendor/name-version.tar.gz(例如monolog/monolog-2.13.0.tar.gz),文件内composer.json的name和version字段必须与文件名完全一致 - 所有包统一放在单层目录(如
/opt/artifacts/),不能嵌套子目录 - 配置命令:
composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}' - 验证是否启用:
composer install -v输出中不应出现任何Downloading行;若有,说明某处 packagist 源残留或 artifact 路径不对
artifact 模式下,Composer 完全不发 HTTP 请求,连 DNS 查询都跳过——这才是真正意义上的“离线”。其他方式都存在 fallback 风险,尤其当 composer.json 或全局配置里埋着一条没注意到的 packagist 引用时。










