Composer离线安装VCS仓库必须禁用packagist.org fallback,否则仍会尝试访问官方源;真正离线可用的只有artifact或path类型,且需预生成dist包并校验shasum,启用COMPOSER_DISABLE_NETWORK=1是硬性前提。

Composer离线安装VCS仓库必须禁用packagist.org fallback
只要项目或全局配置里还留着repo.packagist,哪怕你指定了type: "vcs",composer install仍会先尝试访问https://repo.packagist.org/packages.json——这不是“优化”,是默认行为。必须彻底切断这个路径:
- 全局禁用:
composer config --global repo.packagist false - 项目级检查:
composer config repo.packagist输出应为空,不能是composer https://packagist.org - 删掉
composer.json中所有指向https://packagist.org的repositories条目
否则COMPOSER_DISABLE_NETWORK=1也救不了你。
VCS离线依赖只能靠artifact或path类型,不能靠git clone
type: "vcs"本身不支持离线——它每次install都会触发git元数据探测(比如git ls-remote),而这个操作在无网络时必然失败。真正能离线的只有两种方式:
-
artifact:把
git archive打包成vendor/name-version.tar.gz,放本地目录,再配{"type":"artifact","url":"/path/to/artifacts/"} -
path:直接require本地源码目录,但必须满足:
composer.json里有合法name和version;require时加@dev后缀;repositories中声明"options": {"symlink": false}
别试图给vcs仓库加"url": "file:///...",Composer不认这种写法。
离线前必须预生成dist包并校验shasum
VCS包的composer.lock里dist字段含url和shasum,这是离线生效的关键。联网机上要确保:
- 执行
composer install --prefer-dist(不是--prefer-source) - 检查
composer.lock中对应包的dist块是否含"url"(值为https://...或file://...)和"shasum" - 若用artifact,压缩包名必须严格匹配
vendor/name-version.tar.gz,且包内composer.json的name与version字段要和文件名一致
否则离线机上composer install会报Could not find package ... in a version matching ...,而不是网络错误。
COMPOSER_DISABLE_NETWORK=1是硬开关,其他参数全依赖它
没有它,--no-plugins、--no-scripts、--no-autoloader全是摆设。VCS场景下尤其明显:
- Linux/macOS:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1 && composer install --no-plugins --no-scripts --no-autoloader - PowerShell:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install --no-plugins --no-scripts --no-autoloader
执行完必须立刻补一记composer dump-autoload -o,否则运行时大概率Class not found——因为离线跳过了autoload重建,但没生成优化映射。











