必须设COMPOSER_DISABLE_NETWORK=1,否则composer install必联网校验元数据、插件或脚本仍会触发DNS请求;Linux/macOS加前缀,Windows用set或PowerShell设置,且需配合--no-plugins --no-scripts等参数。

怎么让composer install完全不联网
必须设 COMPOSER_DISABLE_NETWORK=1,否则哪怕你配了本地仓库,Composer 仍可能在元数据校验、插件初始化或 post-install-cmd 里偷偷发 DNS 请求。这个环境变量是离线操作的硬性前提,不是可选项。
常见错误是只改了 repositories 却没加这个变量,结果 composer install 卡在 Downloading https://repo.packagist.org/packages.json —— 这说明网络请求根本没被拦住。
- Linux/macOS:执行前加前缀,如
COMPOSER_DISABLE_NETWORK=1 composer install --no-dev - Windows CMD:用
set COMPOSER_DISABLE_NETWORK=1 && composer install --no-dev - PowerShell:用
$env:COMPOSER_DISABLE_NETWORK="1"; composer install --no-dev
用path类型加载本地包时require怎么写才生效
path 类型源不认 1.0.0 或 ^2.0 这类语义化版本,它只认 dev- 开头的分支名,比如 dev-main、dev-develop。这是 Composer 的设计逻辑,不是 bug。
本地包目录必须有 Git 仓库(至少一个 commit),且 composer.json 中的 name 字段要和 require 里的完全一致(包括大小写和 vendor 名)。
- 项目
composer.json中配置:"repositories": [{"type": "path", "url": "./packages/my-utils"}] -
require写成:"my-utils/my-utils": "dev-main",不是"*"也不是"@dev" - 执行
composer update my-utils/my-utils,而不是全量update,避免误刷其他依赖
artifact仓库为什么总报“Package not found”
artifact 类型仓库要求每个 .tar.gz 包的文件名严格匹配 vendor-name/package-name-version.tar.gz,例如 monolog/monolog-2.13.0.tar.gz。少一个字符、多一个空格、大小写不对,都会导致查找失败。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
更隐蔽的问题是包内 composer.json 的 name 和 version 字段必须与文件名完全一致——哪怕只是 version 多了个 -beta1 后缀,也会不匹配。
- 所有压缩包必须平铺放在同一级目录下,不能嵌套子目录
- 配置命令必须用
composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}',注意url是路径,不是 URL - 必须全局禁用 packagist:
composer config --global repo.packagist false,否则 fallback 行为会绕过 artifact
离线机上vendor目录为啥没生成或不完整
即使你把完整的 vendor/ 目录拷过去,composer install 仍可能重新解压、重建 autoload 或触发脚本——这不是因为网络问题,而是默认行为未被压制。
真正安全的做法是跳过所有非必要动作,只做最小验证和链接重建:
- 用
--no-plugins --no-scripts --no-interaction --no-autoloader参数运行install - 再单独执行
composer dump-autoload -o,确保自动加载映射正确 - 如果看到
vendor/my-package是符号链接(ls -l显示->),说明path源生效;如果是普通目录,说明配置没起作用或被其他仓库覆盖
最易被忽略的是 PHP 扩展一致性:离线机缺 ext-zip 就解不开 dist 包,缺 ext-mbstring 可能让某些包的 autoloader 初始化失败,错误表现却是 Class not found,而非网络相关提示。

















