Release v1.0.0
What's Changed
这是 ModFetch 从实验性工具走向正式版的关键一跃。本次更新对代码库进行了
彻底的重构:从早期的单体实现迁移到清晰的六边形架构
(domain → ports → application → adapters),
同时引入了全新的构建流水线、缓存体系和命令行体验。
⚠️ 破坏性变更:本版本为 1.0.0 正式版,CLI 用法与 v0.2.0 不兼容,
详见下方「CLI 变更」与「迁移指南」。
ℹ️ 说明:
extra_urls、mrpack 的 download/reference 模式、配置继承(from)、
only_version/feature条件配置、Lua 插件运行时、光影包/资源包支持、
Web 界面等能力在 v0.2.x 已存在,仅在本版本中完善与修正,不再重复列入「新特性」。
🧱 架构重构
- 六边形架构落地:建立领域层(domain)、端口层(ports)、应用层(application)、
适配层(adapters),删除旧models/exceptions/services/download/packager分层。 - 统一应用入口:CLI 与 Web 共用
BuildApplicationService,构建/计划/校验同一编排;
依赖解析无状态化(per-call 上下文),循环依赖给出结构化诊断。 - 适配层解耦:下载拆为
HttpDownloader/FileStore/Executor;
打包抽离PackagerPort,返回结构化OutputArtifact,失败不再静默。 - Web 瘦身:删除 FS 扫描与裸
aiohttp,JobManager接入应用服务,
统一事件协议,新增JobEventSink事件翻译器。 - 彻底清理:删除旧 Orchestrator 与死代码(保留向后兼容 shim)。
✨ 新特性
- 全新构建布局(三层):
build/cache(内容寻址全局缓存)+build/{mc}-{loader}
(打包工作区)+dist/(唯一扁平交付目录),配合硬链接物化(默认)
或显式复制(--link-mode copy),重复构建几乎零下载、零冗余磁盘占用。 - 构建计划(Build Plan):引入独立计划用例与序列化能力,
modfetch plan先行生成完整计划(依赖图、解析结果、产物清单)输出到文件或 stdout。 - 光影包按加载器过滤:版本查询以该版本生效的光影加载器(
iris/oculus/optifine)
作 loader 过滤,并新增跨字段关联校验——配置了实际生效的光影包时,
mods必须包含对应光影加载器,错误在构建前即可发现。 - 条件过滤贯通远程校验:
only_version/feature条件此前仅在本地过滤,
本版本让远程校验按版本粒度先行条件过滤再查兼容性,消除误报INCOMPATIBLE。 - 异构
mods数组:配置解析切换至标准库tomllib/tomli,
同数组内可混用 slug 字符串与结构化对象(旧toml库要求同构数组,无法解析)。 - CLI 接入 Lua 插件:插件目录与显式插件路径按
.lua/.py分发到对应加载器,
接入LuaPluginLoader完整生命周期(initialize/shutdown)。 - REFERENCE 模式下处理
extra_urls文件:引用型整合包也能正确携带额外文件清单与内容。 - 下载至指定目录并保持子目录结构:额外文件的子目录路径在打包时得以保留。
- 新增
verify_ssl配置项(默认True)并透传至构建服务,可关闭 TLS 校验。
🖥️ CLI 变更(破坏性)
- 由单命令 + 多个 flag 重构为 子命令风格:
build/plan/check/plugins/clean。
| 旧用法(v0.2.x) | 新用法(v1.0.0) |
|---|---|
modfetch mods.toml |
modfetch build(默认 mods.toml,-c 覆盖) |
modfetch --dry-run mods.toml |
modfetch check |
modfetch --plan --plan-out f.json mods.toml |
modfetch plan -o f.json |
modfetch --clean-cache mods.toml |
modfetch clean --cache |
modfetch --clean-build mods.toml |
modfetch clean |
modfetch --list-plugins mods.toml |
modfetch plugins |
🚀 性能与稳定性
- 消除请求放大:修复发往 Modrinth 的重复/冗余请求,减少接口放大与事件循环阻塞。
- 并发下载统一并发控制,错误以结构化结果传递。
- 修复
aiohttp会话泄漏:调用链显式释放(close),长任务稳定运行。 - 全链路日志打点:下载/解析/物化/打包关键阶段日志补齐。
🐛 修复
- 下载失败跳过物化:不再半途中断或产生脏文件。
feature默认值语义:未传-f时保留配置顶层features默认值,不被空列表覆盖。- 条件剔除反向过滤 bug:修复 feature 全部启用时条件对应条目被误排除的问题。
- 修正示例配置的合法性。
📚 文档与示例
- 全新 README:功能导向重写,含同类工具对比与选用建议。
- 六类配置示例(
examples/):最小可用、多 target、配置继承、条件编译、资源包/光影、插件。
迁移指南(v0.2.x → v1.0.0)
- 命令行:按上方「CLI 变更」表调整命令;
- 配置文件:
mods数组中混用 slug 与结构化对象不再受限(解析器升级,无需改动即可获益); - 构建布局:构建目录已更新为
build/cache + build/{mc}-{loader} + dist三层结构,
旧版产出目录需手动清理; verify_ssl:默认True,如需关闭请在配置中显式设置。
Full Changelog
Full Changelog: https://github.com/moyanj/modfetch/commits/v1.0.0
安装
通过 pip 安装
pip install modfetch==1.0.0下载预编译二进制文件
根据你的平台下载对应的文件:
- Linux:
modfetch-linux-amd64.tar.gz - Windows:
modfetch-windows-amd64.zip
校验和
下载后请验证文件完整性。