离线设备上必须禁用 packagist.org 才能真正断网,否则 Composer 会因 fallback 行为触发 DNS 解析或网络请求;artifact 仓库是唯一纯文件名匹配的离线方案,要求包命名严格为 vendor-name/package-name-version.tar.gz、路径平铺、内部 composer.json 的 name 和 version 完全一致;path 仓库需显式设 "symlink": false 并用相对路径以防工业设备软链失效;PHP 环境一致性(版本、扩展、opcache)比 vendor 内容更重要,小版本差异或缺失 mbstring/openssl/zlib 等扩展会导致 autoload 失败。

离线设备上必须禁用 packagist.org 才能真正断网
只要没彻底关掉默认源,composer install 就会尝试 DNS 解析甚至发请求——哪怕你已经配了本地 artifact 或 path 仓库。这不是“优先级”问题,而是 Composer 的 fallback 行为本身就会触发网络探测。
- 全局执行:
composer config --global repo.packagist false - 检查项目级配置:
composer config repo.packagist输出应为空,不能是composer https://packagist.org - 删掉
composer.json中所有含"https://packagist.org"的repositories条目 - 加
-v参数运行composer install,确认输出里不再出现Downloading https://repo.packagist.org/packages.json
用 artifact 仓库类型时,包文件命名和结构不能出错
artifact 是唯一不依赖元数据请求、纯靠文件名匹配的离线方案。但它对压缩包路径、命名、内部结构极其敏感,错一个字符就失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 所有
.tar.gz文件必须放在同一级目录下(如/opt/artifacts/),禁止嵌套子目录 - 文件名格式必须严格为:
vendor-name/package-name-version.tar.gz(例如monolog/monolog-2.13.0.tar.gz) - 包内根目录下必须有有效的
composer.json,且其中name和version字段要与文件名完全一致(包括大小写、连字符) - 配置命令:
composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}'
path 仓库在工业设备上容易因软链接失效而崩溃
工业设备常运行精简版 Linux(如 buildroot),默认不启用 symlink 支持,或挂载为只读。而 path 类型默认创建符号链接,一启动就报 failed to open stream: No such file or directory。
- 必须在
composer.json的repositories配置中显式加"options": {"symlink": false} - 路径推荐用相对路径(如
./packages/my-driver),避免绝对路径在不同设备间迁移失败 - 本地包的
composer.json必须有明确version,否则 require 时得写dev-main@dev,容易漏掉@dev后缀 - 执行
composer require vendor/name:dev-main@dev,不是composer require vendor/name
PHP 环境一致性比 vendor 内容更重要
工业设备上最常踩的坑不是 Composer 命令不会用,而是 PHP 版本、扩展 ABI、opcache 设置不一致,导致 autoload.php 加载失败或类方法不存在——这时 composer install 成功了,但应用直接崩。
- 确认
php -v小版本号完全一致(如 8.2.12 vs 8.2.11 可能因 opcache 格式差异出错) - 关键扩展必须存在且启用:
mbstring、openssl、json、zlib;缺一个,composer install可能静默跳过某些包 - 检查
php --ini加载的配置是否禁用了allow_url_fopen或phar.readonly(后者会让artifact解压失败) - 在目标设备上跑一次最小验证:
php -r "require 'vendor/autoload.php'; echo class_exists('Psr\Log\LoggerInterface') ? 'OK' : 'FAIL';"
Class not found 往往不是 autoload 没生成,而是扩展没加载或版本 ABI 不兼容。

















