离线环境不能用 file:// 协议配本地仓库,必须用 type: "path" 并声明相对路径(如 "./offline-packages/monolog"),且需在 repositories 首项禁用 packagist.org;安装须执行 composer install --no-network --prefer-dist --no-scripts --no-plugins。

离线环境必须用 file:// 协议配本地仓库,不能写绝对路径
Composer 在离线模式下不走网络,但也不会自动识别你硬盘上的 ZIP 或目录——它只认 repositories 里显式声明的、协议合法的源。用 file:///opt/cache 这种写法会失败,因为 Composer 不支持 file:// 协议(会静默跳过);正确方式是用相对路径 + type: "path" 或 type: "package" 手动注册每个包。
-
type: "path"最实用:url 值必须是相对于项目根目录的路径,比如"./offline-packages/monolog",不能是/home/user/packages/monolog或file:///home/user/... - 目标目录(如
./offline-packages/monolog)下必须有合法composer.json,且含name和version字段 - 如果包没提交到 Git,别用
vcs类型——离线时 clone 不了,path是唯一可靠选择
require 之前必须禁用 packagist.org,否则仍会报“Package not found”
即使你写了 repositories,Composer 默认仍优先查 packagist.org。找不到就直接报错,根本不会 fallback 到你的本地路径。这不是网络问题,是路由策略问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在项目级
composer.json的repositories数组第一项加:{"packagist.org": false} - 不能只写
{"type": "path", "url": "./offline-packages/monolog"}就完事——顺序和禁用声明缺一不可 - 验证是否生效:运行
composer show -p,输出里不应出现packagist.org,只看到你配的path条目
离线安装命令必须带 --no-network,且不能依赖 lock 文件以外的任何网络行为
composer install 默认会检查更新、验证签名、甚至 ping packagist.org。离线机上这些都会卡住或失败,必须用明确参数切断所有外联尝试。
- 正确命令:
composer install --no-network --prefer-dist --no-scripts --no-plugins -
--no-network是硬性开关,不是可选优化——漏掉它,哪怕你配对了所有源,Composer 仍可能在解析阶段发起 DNS 查询 -
--prefer-dist强制用 ZIP 包(你提前下载好的),避免回退到source模式触发 git clone - 确保
composer.lock已存在且与你复制的 ZIP 包版本、shasum 完全一致,否则校验失败直接中断
本地包 autoload 失败?90% 是命名空间没注册或 dump-autoload 没重跑
包装进去了,不代表能 new。离线环境下更难排查,因为错误信息常被误读为“没装上”,实际是自动加载链断了。
- 确认本地包自己的
composer.json里写了autoload,例如:"psr-4": {"Monolog\": "src/"} - 改完本地包或新增包后,在项目根目录手动执行:
composer dump-autoload(开发阶段不用-o) - 不要在
require 'vendor/autoload.php'之前就实例化类——这个文件就是自动加载的入口,顺序错了就找不到 - 如果用了
COMPOSER_VENDOR_DIR改路径,autoload.php的路径引用也得同步改,IDE 索引也得手动加新路径

















