离线安装composer必须设置composer_disable_network=1并禁用全局packagist源,否则即使vendor和lock文件完整,install仍会因联网校验失败;最小可行命令为composer install --no-interaction --no-plugins --no-scripts --no-dev --optimize-autoloader。

不难,但“零基础安装教程”这个说法本身容易误导——离线配置不是点下一步就能走通的流程,它本质是一套环境对齐 + 行为禁用的组合操作。没提前准备、没关掉默认联网行为,哪怕 vendor 目录完整,composer install 仍会卡在 Could not fetch https://repo.packagist.org/packages.json。
为什么 vendor 存在、lock 文件完整,install 还是失败
Composer 默认行为是:每次 composer install 都会主动联网校验 composer.lock 中所有包的元数据(是否存在、版本是否合法、哈希是否匹配),这个步骤无法跳过,除非你切断所有触发路径。
-
COMPOSER_DISABLE_NETWORK=1是硬性前提,不设它,所有--no-xxx参数都无效 - 全局配置残留
repo.packagist会导致 fallback 校验,必须运行composer config --global repo.packagist false彻底禁用 -
composer.lock里若有"source"类型条目(如"dev-master"或 Git URL),离线时无法校验,install必然失败 - 项目
composer.json里写了"repositories": [{"type": "packagist", "url": false}],在COMPOSER_DISABLE_NETWORK=1下也会直接退出,不是静默忽略
离线 install 的最小可行命令组合
这组参数不是“可选优化”,而是防止意外联网的强制防护。前提是:vendor/ 已存在、composer.lock 未改动、PHP 版本和必需扩展(mbstring、openssl、zlib)完全一致。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
composer install --no-interaction --no-plugins --no-scripts --no-dev --optimize-autoloader-
--no-plugins:跳过插件初始化,避免phpstan/extension-installer等隐式联网 -
--no-scripts:屏蔽post-install-cmd,防止脚本调用外部 API 或生成前端资源 -
--optimize-autoloader:强制重建vendor/autoload.php,避免残留旧路径导致Class not found
离线容器镜像怎么配才真正离线
别在 Dockerfile 里写 RUN apt install composer 或 RUN curl -sS https://getcomposer.org/installer | php —— 这些命令在离线容器里必然失败,且会暴露网络请求痕迹。
- 在有网机器上执行:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"→ 校验哈希 →php composer-setup.php --install-dir=/usr/local/bin --filename=composer - Dockerfile 中用
COPY直接复制该composer文件,而非运行时下载 - 务必加
RUN chmod +x /usr/local/bin/composer,否则容器内执行时报Permission denied - 必须写入:
RUN composer config --global repo.packagist false+ENV COMPOSER_DISABLE_NETWORK=1
最容易被忽略的点:验证不能只测 composer --version。真要确认离线可用,得在容器启动后断网(ip link set eth0 down),再跑一次 composer install --no-plugins --no-scripts —— 如果还报 Could not fetch,说明配置没生效,或者被项目级 composer.json 覆盖了全局设置。










