离线部署需禁用 packagist 默认源并配置本地仓库:在 composer.json 中添加 "repositories" 指向本地 file:///opt/mirror 并设 "packagist.org": false;清空 require-dev;避免 autoload.files 引入未打包文件;必须预置 packages.json 和 dist 包,且 composer_disable_network=1 与全局 repo.packagist false 配合使用。

离线环境里 composer.json 不能依赖 packagist.org
离线部署时,composer.json 中默认的 Packagist 元数据源必须显式禁用或替换,否则 composer install 一启动就会尝试访问 https://repo.packagist.org/packages.json 并失败。这不是“网络慢”,而是命令执行路径上不可绕过的校验步骤。
最直接有效的做法是:在 composer.json 顶层加 "repositories" 字段,把 Packagist 指向一个本地文件路径,并设 "packagist.org": false 关闭默认源:
{
"repositories": [
{
"type": "composer",
"url": "file:///opt/mirror"
},
{
"packagist.org": false
}
],
"require": { ... }
}
注意:file:///opt/mirror 必须是容器或目标机上真实存在的、已预置好 packages.json 和 dist/ 子目录的绝对路径;"packagist.org": false 这一行不能省,否则 Composer 仍会 fallback 到远程源。
require-dev 里的包别进离线环境
离线部署只保留运行时必需的依赖,require-dev 里的东西(如 phpunit/phpunit、friendsofphp/php-cs-fixer)不仅浪费磁盘,还可能因 PHP 版本或扩展缺失导致 composer install 直接退出。
- 检查
composer.json,确认所有require-dev条目都已清空或注释掉 - 若项目需 CI 测试能力,应单独维护一套
composer.json.ci,离线部署时不用它 -
composer install --no-dev参数只是跳过安装,不解决require-dev在解析阶段触发的元数据请求问题——所以必须从配置里删掉
autoload 配置要避免 files 引入未打包的脚本
"autoload": {"files": [...]} 看似无害,但在离线场景下容易踩坑:如果这些 PHP 文件本身又 require 了其他未包含在 vendor/ 中的工具类或配置,运行时就会报 Class not found 或 Failed opening required。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
建议做法:
- 只对真正全局可用、无外部依赖的函数文件使用
files(如src/helpers.php) - 所有类加载优先走
psr-4,并确保对应命名空间路径在vendor/或项目src/中完整存在 - 改完
autoload后,必须在联网机上跑一次composer dump-autoload -o,再把生成的vendor/autoload.php和vendor/composer/autoload_*.php一起打包
别信 “加了 --no-network 就能离线”
COMPOSER_DISABLE_NETWORK=1 是必要条件,但不是充分条件。它只阻止下载行为,不阻止元数据解析——而解析依赖树的第一步就是读 packages.json,这个动作在 create-project、install、甚至 init 时都可能发生。
真正起效的组合是:
-
ENV COMPOSER_DISABLE_NETWORK=1(Dockerfile 或 shell 环境变量) -
composer config --global repo.packagist false(写入全局 config,覆盖任何项目级设置) -
"packagist.org": false显式写在composer.json里(防被 lock 文件或插件覆盖) - 所有依赖的 dist 包(.zip/.tar)和
packages.json分片必须已存在本地路径,且路径可被file://协议访问
最容易被忽略的是最后一项:哪怕配置全对,只要 file:///opt/mirror/packages.json 不存在或权限不对,composer install 仍会静默 fallback 到网络——直到超时才报错。










