离线环境下报“package not found”根本原因不是文件缺失,而是composer install阶段仍强制校验远程元数据;必须设composer_disable_network=1,否则--no-plugins等参数无效,且需配合--no-scripts、--no-autoloader及后续composer dump-autoload -o。

离线环境下报“Package not found”,不是包真丢了,而是 Composer 仍在尝试访问 packagist.org 校验元数据——必须设 COMPOSER_DISABLE_NETWORK=1,否则任何 --no-xxx 参数都无效。
为什么 vendor 目录存在还报 “Package not found”
错误根源不在文件缺失,而在 Composer 的 install 阶段默认会发起 HTTP 请求,校验 packages.json、版本可用性、dist.shasum 等远程元数据。哪怕 vendor/ 已完整存在,只要没显式切断网络通路,这个请求就会触发并失败。
-
COMPOSER_DISABLE_NETWORK=1是硬性前提,不设它,--no-plugins、--no-scripts全部失效 - 若
composer.lock中某包的dist.url是https://开头,且未配置本地仓库,COMPOSER_DISABLE_NETWORK=1下会直接退出,不给你机会 - 验证是否真断网:往
/etc/hosts(Windows 是%SystemRoot%\System32\drivers\etc\hosts)加一行127.0.0.1 packagist.org,再跑composer install -v;看到Connection refused才算到位
最稳落地命令:禁网络 + 三 no + 补 autoload
目标机已有完整 vendor/ 和未改动的 composer.lock 时,只执行这一行:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader
-
--no-plugins:跳过插件初始化,避免phpstan、extension-installer等隐式联网 -
--no-scripts:屏蔽post-install-cmd,防止脚本调用外部 API 或生成配置 -
--no-autoloader:绕过 autoload 重建阶段,某些自定义实现会触发远程类查找 - 执行完必须立刻补一记:
composer dump-autoload -o,否则运行时大概率报Class not found
artifact 仓库:用本地 ZIP 包替代远程源
适合分发预打包的 SDK、定制版组件,不依赖 Git、不查 Packagist,只按命名匹配解压。
- ZIP 文件必须放在指定路径(如
./packages/archives),不能嵌套子目录 - 文件名格式严格为
vendor-name-package-name-version.zip(短横线分隔,非斜杠或下划线) -
composer.json中require的版本号必须和 ZIP 名里的version完全一致(如写"1.2.0"就不能写"^1.2") - 在项目根
composer.json顶部加:{"repositories": [{"type":"artifact","url":"./packages/archives"}]} - 运行:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts
path 仓库:装本地源码目录,适合调试或私有组件
当你手头是未打包的完整源码(含 src/、composer.json),且需要实时修改时,这是唯一合理选择。
- 本地包根目录下必须有合法
composer.json,含name(如"acme/utils")和version或分支标识(如"dev-main") - 项目
composer.json的repositories中写绝对路径(Windows 要带盘符,如C:/projects/my-pkg) - 执行:
composer require acme/utils:dev-main(版本号必须和本地包composer.json里的一致) - 安装后
vendor/acme/utils是符号链接(Linux/macOS)或完整复制(Windows),改本地代码立即生效 - 常见报错
Could not find package多因:repositories写错位置、本地包缺composer.json、name拼错、路径用了相对路径、或本地包未git init && git commit
真正容易被忽略的是 installed.json 里的绝对路径污染和 vendor/bin/ 下脚本的解释器硬编码——它们不会在 dump-autoload 时被清理,却会在跨环境运行时报错。打包前务必删掉 vendor/composer/installed.json,并检查 vendor/bin/ 是否可执行。










