news 2026/9/9 21:40:14

如何为 uBOLite 将过滤列表转换为声明式 ruleset?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何为 uBOLite 将过滤列表转换为声明式 ruleset?

如何为 uBOLite 将过滤列表转换为声明式 ruleset?

【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock

uBlock Origin 仓库中包含一个 MV3 分支产品 uBOLite:它不再在运行时动态解析过滤规则,而是把文本形式的过滤列表预先转换成浏览器的 declarative ruleset。要完成这条转换链,你在 Linux 环境下按仓库的构建流程跑一次构建即可——tools/make-mv3.sh会调用 Node.js 脚本 make-rulesets.js,逐个拉取并转换 rulesets.json 中声明的过滤列表,最终产出rulesets/目录下的 DNR 规则文件和打过补丁的manifest.json。本文基于 platform/mv3/README.md 和构建脚本正文,说明这条路径的前提、执行方式和如何核对产物。

前提条件

构建说明明确要求 Linux 环境,且对 Node.js 版本有下限要求:

  • platform/mv3/README.md 写明该 Nodejs 脚本要求 Node 版本为17.5.0 或以上;platform/mv3/package.json 中的engines.node同样声明"node": ">=17.5.0"
  • 构建会从远程服务器下载过滤列表,需要网络访问。
  • 仓库包含子模块,README 给出的准备步骤是:
git submodule init git submodule update

哪些过滤列表参与转换

转换的输入清单是 platform/mv3/rulesets.json,每个条目描述一个列表集,字段包括idnamegroupenabledurls(列表下载地址)、homeURL,以及可选的langtagstrustedparentexcludedPlatforms。例如默认启用的条目有ublock-filters(指向 uAssets 仓库的quick-fixes.min.txtunbreak.min.txtfilters.min.txtprivacy.min.txtubol-filters.txt五个文件)、easylisteasyprivacypglublock-badwareurlhaus-full

脚本主循环中的过滤逻辑值得注意:

for ( const ruleset of rulesets ) { if ( ruleset.excludedPlatforms?.includes(platform) ) { continue; } await rulesetFromURLs(ruleset); }

即条目excludedPlatforms中包含当前构建平台时会被整体跳过。rulesets.jsonpglublock-badwareurlhaus-fulladguard-spyware-urlpol-3均声明了"excludedPlatforms": [ "safari" ],所以make mv3-safari不会为这些列表生成 ruleset。

执行转换

在仓库根目录执行([platform]chromiumedgefirefoxsafari):

make mv3-chromium

其他平台对应make mv3-edgemake mv3-firefoxmake mv3-safari。Makefile 中这些目标依赖ubol-codemirror(先构建 codemirror-ubol 打包产物)和dist/build/mv3-data,然后实际执行的是tools/make-mv3.sh <platform>

make mv3-*属于增量重建目标:脚本开头会rm -rf掉已有的dist/build/uBOLite.$PLATFORM目录再重建,所以重复执行会删除并覆盖上一次的扩展产物。它内部做三件事(见 tools/make-mv3.sh):

  1. 把 uBlock 主分支与 MV3 目录的文件复制到dist/build/uBOLite.$PLATFORM组装扩展骨架;
  2. 搭建一个临时构建目录,运行:
node --no-warnings make-rulesets.js output="$UBOL_DIR" platform="$PLATFORM"
  1. 按平台收尾:edge会把rulesets/main/*移到包根目录(注释说明 “For Edge, declared rulesets must be at package root”)并运行platform/mv3/edge/patch-extension.jssafari运行platform/mv3/safari/patch-extension.js做合规修补。

在转换脚本内部,每个列表集的文本(本地缓存缺失时从urls远程拉取,成功后写入缓存目录${output}/../mv3-data,即dist/build/mv3-data)经dnrRulesetFromRawLists解析为 DNR 规则,再按类型拆分落盘;同时生成一个 16 位十六进制secret(存于mv3-data/secret.txt,首次生成后复用),用于给内置过滤片段插入!#trusted on <secret>签名。

核对产物

构建完成后,按 README 的说明逐项检查:

  • 扩展包位置dist/build/uBOLite.chromium(或.edge/.firefox/.safari)。
  • ruleset 文件:全部位于dist/build/uBOLite.[platform]/rulesets下,脚本写出的文件包括:
    • main/<id>.json——每个列表集一个静态规则集,其中每条规则带递增的id,例如main/ublock-filters.json
    • regex/<id>.json——仅当该列表集存在正则规则时才生成;
    • strictblock/<id>.jsonurlskip/<id>.jsonscripting/下的 cosmetic/scriptlet 产物——均为条件生成,非空才写出;
    • ruleset-details.json(每个列表集的过滤/规则统计)、scriptlet-details.jsongeneric-details.json
  • manifest 已打补丁:脚本会写回manifest.json,新增declarative_net_request.rule_resources(每个列表集一项,path形如/rulesets/main/<id>.json,携带idenabled),并追加重定向资源所需的web_accessible_resources条目,同时把version更新为本次构建的时间戳版本号。
  • 构建日志dist/build/uBOLite.[platform]/log.txt记录构建过程中发生了什么,README 明确将其作为排查构建过程的依据;每个列表集的处理中会记录输入过滤条数、接受/拒绝条数和输出规则条数。

可选分支与限制

  • 强制刷新过滤列表dist/build/mv3-data缓存了从远程拉取的数据,重复构建不会重复下载。需要最新列表时执行make cleanassets,其 Makefile 定义为rm -rf dist/build/mv3-data dist/build/uAssets,即删除全部本地缓存的过滤列表,下次构建会重新拉取。
  • 本地调试构建:不带版本号参数的构建(即上面make mv3-*走的路径)会向manifest.json增加declarativeNetRequestFeedback权限(脚本注释标明用于 DNR 规则调试);Firefox 平台还会把扩展 ID 改为uBOLite.dev@raymondhill.net以区别于正式版。
  • 发布构建:直接向脚本传full或形如x.y.z的版本号(如tools/make-mv3.sh full)会打包出uBOLite_<TAGNAME>.<platform>.zip(Firefox 为.xpi)并放到dist/build/;同时会删除rulesets/debug目录。
  • 缩小更新差异tools/make-mv3.sh支持before=<dir>参数,构建后调用 salvage-ruleids.mjs,对比 before/after 两包中mainmodify-headersredirectregexremoveparam各子目录的规则文件,保留未变化规则的id以缩小 diff 尺寸。
  • 平台差异excludedPlatforms决定某些列表只在部分平台生成 ruleset(见前文);Edge 的声明式 ruleset 必须位于包根目录,Safari 需要额外的合规修补步骤,两者由构建脚本自动处理。

如果构建失败,先读dist/build/uBOLite.[platform]/log.txt定位是哪个列表集在哪一步出错;拉取失败会记录为Fetching failed: <url>一类信息,可用make cleanassets清缓存后重试。

【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 21:39:21

ZLMediaKit 传输协议选型:TCP 与 UDP 快速选择指南

ZLMediaKit 传输协议选型&#xff1a;TCP 与 UDP 快速选择指南 【免费下载链接】ZLMediaKit WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C11 项目地址: …

作者头像 李华
网站建设 2026/9/9 21:38:51

ERTEC硬件过滤器:PROFINET实时通信的帧过滤与中断优化实战

刚入行PROFINET开发的那阵子&#xff0c;我踩过一个大跟头。设备在实验室跑得好好的&#xff0c;一挂到现场总线上就开始偶发丢包&#xff0c;CPU中断占用高得吓人&#xff0c;示波器抓出来的时序跟狗啃过一样。后来查了几天才发现&#xff0c;问题根本不在栈写得好不好&#x…

作者头像 李华
网站建设 2026/9/9 21:38:31

STM32电子密码锁Proteus仿真:矩阵键盘、EEPROM与状态机实战解析

简介&#xff1a;基于STM32设计的电子密码锁仿真与源码工程&#xff0c;面向嵌入式系统学习者、电子设计竞赛选手以及相关课程设计/毕业设计学生&#xff0c;用于掌握单片机密码锁系统的完整设计流程。资源共277个文件&#xff0c;以C语言源码&#xff08;70个.c&#xff09;和…

作者头像 李华
网站建设 2026/9/9 21:38:02

西门子S7-200 SMART恒压供水系统:PID整定与泵组调度实战解析

简介&#xff1a;西门子S7-200 SMART恒压供水项目程序包&#xff0c;面向电气工程师、自动化调试人员及水务相关从业者&#xff0c;主要解决多泵恒压供水系统的电机投切、频率调节与压力稳定控制问题。系统采用一台变频器控制一台水泵&#xff0c;共四台主泵、一台辅泵&#xf…

作者头像 李华
网站建设 2026/9/9 21:37:13

在线ping检测怎么测?从客观判断方法

用 www.kkce.com&#xff08;KKCE 快快测&#xff09;​ 做在线 Ping 检测&#xff0c;从“客观判断”的角度来说&#xff0c;核心逻辑是&#xff1a;不靠单次 Ping 的“通/不通”下结论&#xff0c;而是用可量化指标&#xff08;丢包率、延迟分布、TTL 跳数&#xff09; 控制变…

作者头像 李华