ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

拆解IwaraDownloadTool架构:一个TypeScript用户脚本如何管理17个核心模块

拆解IwaraDownloadTool架构:一个TypeScript用户脚本如何管理17个核心模块 拆解IwaraDownloadTool架构一个TypeScript用户脚本如何管理17个核心模块【免费下载链接】IwaraDownloadToolIwara 下载工具 | Iwara Downloader项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadToolIwaraDownloadTool 是一款基于 TypeScript 的Iwara 视频下载工具Iwara Downloader 用户脚本。它以 Greasemonkey 用户脚本形态运行能批量下载视频、对接 Aria2 下载器、自动嗅探网盘链接并用模块化架构把 17 个核心模块分层管理。这篇文章带你从整体到局部看懂它是如何把「下载」这件复杂的事拆成清晰、可维护的代码块。一张图看懂目录分层项目把所有业务代码放在src/下按职责切成 9 个目录。这种「按功能分包」的结构是它能在单一用户脚本里维持复杂度的关键目录职责典型模块core/基础设施配置、数据库、类库、劫持、日志config.ts、db.tsdownload/下载队列、Aria2 对接、网盘嗅探download.ts、aria2.tsnetwork/登录鉴权、页面同步、fetch 拦截auth.ts、fetchInterceptor.tsui/配置面板、提示框、菜单渲染ui.ts、notify.tsi18n/中 / 英 / 日三语文案zh_cn.jsondata/站点域名、网盘规则等静态数据site.jsoncss/菜单、覆盖层、视频卡片等样式menu.csstypes/全局类型声明Iwara、Aria2、主进程iwara.d.tsmata/用户脚本元数据userjs.mata 核心思想分层 单入口。所有模块最终由main.ts统一装配模块之间通过清晰的依赖关系协作而不是互相缠绕。单入口main.ts 如何串起 17 个模块入口文件 main.ts 是整个脚本的「总装配车间」。它做三件事环境校验从 site.json 读取受支持域名不匹配目标站点直接throw Not target退出确保脚本只在 Iwara 上运行。劫持注入通过 hijack.ts 保存的originalXxx原函数包裹浏览器的appendChild、removeChild、history.pushState、localStorage等方法在视频卡片插入时自动挂上「选择」复选框。启动主流程main()注入样式 → 注入水印与菜单 → 检查登录态 → 接管已有 Aria2 任务 → 弹出首屏提示。它还会做版本迁移用 class.ts 里的Version类对比旧版本号不兼容时自动清空旧配置并刷新页面避免升级后数据错乱。核心层 core11 个基础设施模块core/是全项目最底层的地基几乎每个模块都依赖它config.ts— 用单例模式管理全部用户配置下载路径、Aria2 地址、语言等DEFAULT_CONFIG定义了默认值。db.ts— 基于idb封装 IndexedDB用DBSchema强类型定义videos、follows、friends、idmap四张表并支持整表导出为 JSON 文件。class.ts— 提供通用类Path跨 Windows / Unix 路径规范化、Version语义化版本比较、Dictionary与GMSyncDictionary跨标签页同步的字典。hijack.ts— 集中保存被「劫持」前的原生函数引用是所有 DOM / Storage / History 钩子的数据源。enum.ts— 统一定义DownloadType、PageType、ToastType等枚举让全项目共享一套「语言」。pageType.ts— 根据 URL 路由判定当前页面类型视频页、订阅页、论坛等。env.ts、log.ts、gmLock.ts、mutex.ts、extension.ts— 环境工具、分级日志、GM 锁、互斥锁与 DOM 扩展分别解决并发与调试问题。下载层 download从「链接」到「文件」download/负责真正的下载逻辑是一条清晰的流水线download.ts— 下载调度主逻辑根据 enum.ts 的DownloadType分派到不同执行器。downloadQueue.ts— 队列化管理多个视频任务保证并发有序。aria2.tsaria2TrackManager.ts— 对接 Aria2 JSON-RPC启动时自动接管已有任务、速度过慢时重启。downloadPath.ts— 配合Path类处理保存路径与文件名模板支持%#AUTHOR#%、%#TITLE#%变量。linkCheck.ts— 自动嗅探视频简介与评论区里的第三方网盘下载链接。网络层 network登录、同步与拦截auth.ts— 读取登录态、构造 API 请求头。fetchInterceptor.ts— 替换unsafeWindow.fetch拦截并增强网络请求。syncPages.ts— 同步订阅 / 分页视频数据。mediaCenter.ts— 对接媒体库如 Jellyfin 类服务的 API。envCheck.ts、video.ts、xVersion.ts— 环境自检、视频信息与版本兼容处理。界面与国际化让用户「看得懂、用得爽」UI 层ui.ts 渲染插件菜单与复选框configUi.ts 提供可视化配置面板notify.ts 与 toastify.ts 负责各类提示与 Toast。国际化i18n.ts 加载 zh_cn.json、en.json、ja.json 三套文案配合 config.ts 的language字段切换。小结为什么这套架构值得学习按职责分包core / download / network / ui / i18n各司其职新人能按目录快速定位。单入口装配main.ts 统一调度依赖方向清晰避免循环引用。类型先行types/下的.d.ts与 class.ts 的通用类让 TypeScript 的强类型贯穿全项目。健壮的基础设施版本迁移、互斥锁、跨标签页同步字典都是把「单脚本」做出「工程化」体验的关键。想深入源码建议从 main.ts 的main()开始顺着core/→download/→network/的依赖链读下去17 个核心模块的职责与协作关系很快就会一目了然。【免费下载链接】IwaraDownloadToolIwara 下载工具 | Iwara Downloader项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表