十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

如何在 Node.js 项目中安装 uBO core 并完成第一条网络请求匹配验证

如何在 Node.js 项目中安装 uBO core 并完成第一条网络请求匹配验证 如何在 Node.js 项目中安装 uBO core 并完成第一条网络请求匹配验证【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock如果你要在自己的 Node.js 服务里判断“某条网络请求是否会被 uBlock OriginuBO的过滤规则拦截”就需要把 uBO 的核心过滤引擎以 npm 包的形式装进项目并跑通第一条matchRequest匹配验证。gorhill/ubo-core包包含 uBO 的静态网络过滤引擎SNFEStatic Network Filtering Engine负责解析和执行过滤列表没有任何外部依赖。本文给出从安装到验证第一条请求匹配的完整路径环境要求、安装命令、官方demo.js快速验证以及一段可以离线运行、结果确定的最小验证脚本。准备条件Node.js 与 npm 版本要求仓库中 npm 包的 package.json 声明了运行环境engines: { node: 18.0.0, npm: 6.14.4 }即 Node.js 不低于 18.0.0、npm 不低于 6.14.4。demo.js使用了全局fetch这正好对应 Node.js 18 起内置的能力。另外该包 README 明确说明它使用原生 JavaScript 模块ES module 语法。如果你的项目package.json没有声明模块类型建议在生成的package.json中加入type: module这样直接运行.js脚本时就不会有 ESM 警告这一点在 demo.js 的头部注释中有说明。安装 gorhill/ubo-coredemo.js 头部注释给出了官方推荐的命令行操作按顺序执行mkdir myproject cd myproject npm install gorhill/ubo-core cp node_modules/gorhill/ubo-core/demo.js .前两条命令在当前项目目录中完成安装最后一条把包内自带的demo.js复制到你的项目根目录供你修改和执行。仓库中当前这个包版本为 0.1.30。第一条验证直接运行包内自带的 demo.js执行node demo.js需要先了解demo.js的运行前提它会在你的项目目录下产生副作用首次运行需要网络它会从远程服务器拉取一批过滤列表uBO 自带的 filters、badware、privacy 等以及 EasyList、EasyPrivacy、Peter Lowe 的列表会写入本地缓存列表加载完成后引擎内容会被序列化写入./cache/selfie.txt。之后每次运行只要该文件不超过 7 天就直接用deserialize恢复引擎不再请求远程服务器错误处理很少源码注释明确说明这个 demo 刻意保持最简没有太多错误处理某个列表拉取失败时只会打印错误原因。运行成功后demo.js会对三条内置测试请求逐条调用matchRequest并打印结果格式如下文档示例具体命中内容取决于你拉取到的过滤列表版本Request details: { originURL: https://www.bloomberg.com/, url: ..., type: script } Blocked: ...matchRequest的返回值含义在 demo.js 与 tests/snfe.js 中都有体现返回值含义1Blocked被过滤规则拦截2Unblocked命中了例外规则放行其他0Not blocked没有规则匹配命中时通过snfe.toLogData()可以拿到这条匹配的日志详情。离线验证用最小脚本匹配第一条网络请求如果不想依赖远程列表可以用仓库测试文件 tests/snfe.js 中“pure-hostname block filter”用例的规则和请求写一个完全离线的最小脚本。在该测试中引擎加载||example.net^后对目标请求的返回值被断言为1所以这是一个有文档依据的成功判定标准。在myproject目录下创建verify.jspackage.json需已有type: moduleimport { StaticNetFilteringEngine } from gorhill/ubo-core; const snfe await StaticNetFilteringEngine.create(); // 过滤列表内容可以直接以 { name, raw } 对象传入无需远程拉取 await snfe.useLists([ { name: test, raw: ||example.net^ }, ]); const r snfe.matchRequest({ originURL: https://www.example.com/, type: image, url: https://www.example.net/, }); if ( r 1 ) { console.log(Blocked:, snfe.toLogData()); } else if ( r 2 ) { console.log(Unblocked:, snfe.toLogData()); } else { console.log(Not blocked); }各部分的依据引擎实例化StaticNetFilteringEngine.create()与导入方式见 platform/npm/README.mduseLists接受对象或对象的 Promise数组每项用raw属性提供列表原文name属性可选matchRequest的请求参数包含originURL、url、type三个字段本脚本使用的规则||example.net^、请求对象以及返回值1的预期直接取自 tests/snfe.js 中“should match pure-hostname block filter”用例该用例断言r 1。执行node verify.js验证成功的判断标准脚本打印Blocked:开头的日志且匹配结果返回1说明https://www.example.net/这条请求被纯主机名过滤规则||example.net^拦截。如果想确认“放行”路径可以在raw中追加例外规则||example.net^此时同一请求应返回2Unblocked对应 tests/snfe.js 中“pure-hostname exception filter”用例的断言。使用限制与已知边界同一进程只能有一个引擎实例。README 说明目前 SNFE 只能存在一个实例tests/snfe.js 的初始化用例也验证了这一点第二次调用StaticNetFilteringEngine.create()会 reject。API 处于早期状态。README 明确提示“This is a very early version and the API is subject to change at any time.”升级包版本后建议回归验证匹配行为。列表来源由你自己负责。useLists只接收列表原文如何获取列表远程拉取还是本地文件由你的代码决定。下一步序列化与快速加载引擎列表全部加载进引擎后可以跳过重复解析直接复用引擎状态来自 READMEconst serializedData await snfe.serialize(); // 之后可以在新实例中快速加载 const snfe await StaticNetFilteringEngine.create(); await snfe.deserialize(serializedData);demo.js的cache/selfie.txt机制就是这一能力的应用首次运行解析并编译全部列表后续运行直接反序列化恢复避免每次都访问远程列表服务器。如果你的项目对启动耗时敏感可以把serialize()的产物持久化下来按 demo.js 的方式结合文件修改时间例如 7 天有效期决定是否重新拉取列表。【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表