离线导入依赖必须设composer_disable_network=1,否则composer install必卡在loading composer repositories或报could not fetch;需配合--no-plugins、--no-scripts、--prefer-dist等参数,并确保php版本、扩展及环境一致,或直接复制vendor目录。

离线导入依赖必须设 COMPOSER_DISABLE_NETWORK=1
不加这个环境变量,composer install 一定会卡在 Loading composer repositories 或报 Could not fetch https://repo.packagist.org/packages.json——哪怕 vendor/ 目录完整、composer.lock 一字未改。这不是“建议禁网”,而是强制跳过所有网络触发点:元数据拉取、dist 校验、插件初始化时的远程调用。
Linux/macOS 直接前置运行:COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-dev --prefer-dist
Windows CMD 先执行:set COMPOSER_DISABLE_NETWORK=1,再运行命令
PowerShell 执行:$env:COMPOSER_DISABLE_NETWORK="1"; composer install --no-plugins --no-scripts --no-dev --prefer-dist
-
--no-plugins防止 hirak/prestissimo 等插件偷偷发 HTTP 请求 -
--no-scripts跳过post-install-cmd(比如执行npm install或生成缓存) -
--prefer-dist是硬性要求:只有 dist 包(ZIP/TAR)才走缓存或本地路径;source 类型(如 git)会直接报错
最稳方案:直接复制 vendor/ 目录
只要源机与目标机环境一致,vendor/ 就是可部署资产,完全绕过解析、校验、下载环节。它比缓存迁移更可靠,因为不依赖任何元数据文件。
- PHP 版本必须严格一致(含小版本,如
8.2.12),否则ext-zip、ext-mbstring等扩展行为可能不同 - 源机执行前务必跑:
composer install --no-dev --optimize-autoloader,再用最小代码验证 autoload:require 'vendor/autoload.php'; echo class_exists('Monolog\Logger') ? 'OK' : 'FAIL'; - 打包时保留符号链接和文件权限(
tar -czf比zip更稳妥) - 目标机解压后优先运行:
composer dump-autoload -o,修复 symlink 路径污染或权限问题
用缓存迁移时,必须打包整个 ~/.composer/cache/
只拷 cache/files/ 是最常见错误。Composer 缓存生效依赖三个子目录共存:files/(ZIP 包)、repo/(JSON 映射表)、archived/(归档缓存)。缺任一,就会 fallback 到联网请求。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先查真实路径:
composer config --global cache-dir(Linux/macOS 默认~/.composer/cache,Windows 是%LOCALAPPDATA%\Composer\cache) - 打包整个根目录,包括隐藏文件(如
.htaccess)和子目录 - 离线机上必须同步设置:
composer config --global cache-dir /path/to/restored/cache,否则 Composer 仍查默认空路径 - 验证是否完整:检查
repo/https---packagist.org/packages.json是否存在且非空(内容应为 JSON,含大量包名与版本映射)
私有包或精确控制 ZIP 来源,用 --repository-url=file://
当项目含 GitLab 私仓、或需要确保每个 ZIP 文件来源可控时,全局缓存容易因路径/权限/用户问题失效。此时把所有 dist ZIP 按 vendor/name/version-hash.zip 结构整理进一个本地目录,再用 --repository-url=file:///path/to/dist 直接指向,能彻底绕过缓存解析逻辑。
- ZIP 文件名必须严格匹配 lock 中记录的
dist.shasum和dist.url路径片段 - 配置命令:
composer config repositories.0.type package+composer config repositories.0.url /path/to/dist - 必须禁用 packagist fallback:
composer config --global repo.packagist false,否则仍会尝试联网 - artifact 仓库要求文件名格式为
vendor-name/package-name-version.tar.gz,少一个字符或大小写不对都会Package not found
真正麻烦的不是命令怎么写,而是 PHP 小版本差异、扩展缺失(比如 ext-zip 在离线机没装)、或 composer.lock 里混了 type: git 的 source 依赖——这些不会报网络错误,但会让 vendor/ 解压失败或类加载失败。










