@eyeo/snippets

中文文档
2.18.0发布于 2026/10/23GPL-3.0-onlyES Module零依赖近 30 天下载 7244

ads 阻断器的眼/o片段

中文使用文档
文档目录11 节
  1. 简言之,片段
  2. 如何使用此模块
  3. 发布后如何直接到达我们的文件
  4. XPath 3.1 支助
  5. 第三方图书馆
  6. 模块结构
  7. 建筑概况
  8. 地方发展
  9. 工具版本( 可选)
  10. 承诺前钩
  11. 关于释放

@ eyeo/ 片段

本单元的目标是提供一个预先捆绑、预先测试和提前优化的版本 片断 用于各种移动,或桌面, Ads 阻断器.

简言之,片段

每个片段都以过滤文本表示,通过 #$# 语法, 然后是片断 名称 和 0,用空格分隔出一个或多个参数,或者当空格是参数的一部分时,包含在引文中.

! logs 1 2 3 in the console
evilsite.com#$#log 1 2 3

每个过滤器可以通过分号执行多个片段 ; 在电话之间.

! logs 1 2 then 3 4 5 in the console
evilsite.com#$#log 1 2; log 3 4 5

两种片段

片段可以运行为 内容脚本,这是一个单独的环境,可以复制 管理部 但绝不干涉 联合来文 在用户页面上运行(反之亦然),或作为 注入脚本 在网页上运行 在第3党和普通网站 联合来文 代码.

前一种叫做 单独,因为它通过Web扩展API运行沙盒,而后一种则称为 主要,或 已注射因为它需要在页中运行的代码的其余部分中进行评价,因此它被字面地注入了这样的一页.

一些片段可能只是一种用途,因此,可在两个数据库中查阅 主要 编辑 单独 诸世界. 片段的执行方式及其可能的副作用仍被限制在孤立或主要部分 " 世界" 它会碰到.

如何使用此模块

本单元目前提供以下出口:

  • @eyeo/snippets 包括两个 isolated 财务报告和审定财务报表 main,又作 injected,导出名称
  • @eyeo/snippets/isolated 仅包括 isolated 导出
  • @eyeo/snippets/main,别名为 @eyeo/snippets/injected 仅包括 main 导出
  • @eyeo/all 它会输出所有片段,作为这些环境的单个回调 单独 这个世界是 不支持标准 无害环境管理 用于

因此,根据项目需要,本单元可采用各种方式.

发布后如何直接到达我们的文件

请随时检查 我们的新闻稿页面 并自由使用 URL 指向我们释放的分支,通过 https://gitlab.com/eyeo/snippets/-/raw/RELEASE_VERSION/dist/YOUR_FILE_HERE.js时 RELEASE_VERSION 可能会是 v0.5.0 或他人,以及 YOUR_FILE_HERE 为:

  • 页:1 铬 基于产品,我们有一个 标准化 世界第一件文物,可以通过这个模块的 独立第一.jst 文件
  • 页:1 网络Kit 基础产品,我们是一个 主要 所有文物都可以通过这个模块 片断.js 文件

两者 main.js 财务报告和审定财务报表 isolated.js 包含其他文件的相同代码.

他们的源代码完全相同 网页文件夹 及其源文件.

XPath 3.1 支助

随着片段模块版本0.8.0的发布,我们引入了一个新的片段,叫做: hide-if-matches-xpath3 允许使用 XPath 3.1 函数来瞄准广告。 由于XPath 3.1并非由浏览器本土支持,片段需要向被隔离的上下文注入依赖性才能正常工作. 如果您正在使用, 此依赖会自动使用现有的网络扩展机制注入 iyo 网页扩展屏蔽工具箱对于以铬为原料的产品,依赖性注射逻辑将得到支持 iyo 浏览器 Ad- Filtering 解决方案 。 。 。 .

作为以铬为原料的产品,如果使用 @eyeo/snippets 作为独立库的模块,您需要积极选择使用才能使用 hide-if-matches-xpath3 片断。 你可以继续使用 isolated-first.jst 现有建筑阶梯没有任何改变. isolated-first.jst 不包含 hide-if-matches-xpath3 片段,但它会继续被支持。 如果你想包括 hide-if-matches-xpath3 片段你需要做两步。 首先你必须用 (原始内容存档于2018-03-13) (英语). select-sign-first.jst 取而代之的是文物。 其次,您需要执行依赖性注入逻辑,以便在片断运行前包含所需的依赖性。 你可以注射这个 依赖关系.jst 保存到页面并调用依赖函数: hideIfMatchesXPath3Dependency()。片段应如预期的那样工作.

第三方图书馆

模块结构

这个 源文件夹 包含用于创建此两个中的所有文件 磁盘文件夹 财务报告和审定财务报表 网页文件夹。 。 。 .

前者包含由第三方使用的文件,非网络扩展相关,项目,而 网络ext 文件夹包含文件的优化版本和源版本,以便最终能够提供 调试 模式而不是模式 生产 一个.

建筑概况

这个模块被Web扩展和第三党合作伙伴使用,即使源代码总是相同的,这些是不同的目标.

本节要从高层次解释这些文件夹之间的差异.

网页

此文件夹包含所有定义的导出 ECMAS脚本 标准模块(aka) 无害环境管理(a) 国家 package.json 文档.

两者 主要 财务报告和审定财务报表 单独 出口为: 纯函数 能够传递到宣言 v3 脚本 API。 。 。 .

这些功能被扩充成只读 地图 通过a .has(snippetName) 财务报告和审定财务报表 .get(snipetName) 其中:

  • .has(...) 返回时 真实 如果片段因这个特定世界而出名(或 主要 或者说 标准化(中文(简体) )
  • .get(...) 返回( n) 无效 或一个 回调 用作 依赖性 对于非常具体的脚本

这种方法赋予了我们能力,只要该特定页面不需要这样的片段,就可以执行最小的代码量,因为依赖性确实可以相当大(在此情况下是被剥去的"TensorFlow库"版本+二进制模型).

这些回调通常不为第三党片段的其他消费者所使用或需要.

位点

此文件夹包含的文件可以是 内嵌 直接作为任何 HTML 语言 页面,然后立即通过周围文本执行 :

// example of distFileContent source code
// distFileContent = readFileSync("dist/snippets.js")
// distFileContent = readFileSync("dist/isolated-first.jst")
page.evaluate(`(${distFileContent})(...${JSON.stringify([env, ...snippets])})`);

在那个 snippets.js 我们只有片段 货币 一个嵌入到一个单调回, 所有片段运行在 主要 这个世界.

这个 isolated-first.jst 文件将立即执行 标准化 片段和, 如果有什么 主要 用于执行的世界, 它包含一些逻辑来附加运行在用户页面上的脚本 主要 世界的片段紧接着, 仍然传递着同样的论点 通过它通过 [env, ...snippets] 连载化.

这个 .jst 扩展名 JS 模板 之所以选择它 是因为否则某些工具链 可能会试图自动修改这样的文件 并且,因为它的内容 并没有被引用 因为这只是一个召回, 甚至没有马上执行.

我们想出了一个模板扩展,以避免嵌入工具链(即Android)的分解器,从而在注入后实际破解我们的代码.

该页面中的其他文件 数字 文件夹提供,就像它用于 网络ext 一、完整源代码的替代品或任何其他可能的替代品 被隔离 或者说 主语.js 也许吧.

笔记 这些文件在 数字 文件夹不导出为模块 不过 如上一个会话所解释的,通过释放标记使用.

地方发展

安装建造工具并建造文物:

npm install
npm run build

npm run build 重新生成 dist/ 财务报告和审定财务报表 webext/ 然后进行测试. npm test 自己进行测试.

工具版本( 可选)

节点和承诺前版本被固定在 mise.toml。安装 爱 运行 mise install 在寄存器根中获取它们,或者自己安装相同的版本.

承诺前钩

存储器使用 承诺前 以本地运行的相同安全扫描仪(semgrep和gitleaks)。 安装预承诺, 然后启用钩子一次 :

pre-commit install

钩子会自动运行在每一个承诺上。 根据要求运行它们与整个存储库:

pre-commit run --all-files

关于释放

我们试图遵循官方的指导 吉特拉布语Name 通过下列步骤:

  1. 确保内部源代码和寄存点 在发布代码,我们希望作为模块运送
  2. 从 main,运行发行准备脚本 :
    ./prepare-release.sh [major|minor|patch] [path-to-abp-snippets/source]
    
    脚本将以下步骤自动化(并在第5步暂停进行人工干预):
    • 创建分支 vX.X.X
    • 将版本在 package.json 不创建标签
    • 从提供的源代码文件导入 abp-snippets/source 路径( 可选; 可在之后手动运行) npm run build.assets <path>(中文(简体) )
    • 暂停 因此,如果需要,您可以做任何手工修改,例如:
      • 注册新片段 bundle/main.js (主要上下文)或 bundle/isolated.js (单独上下文)
      • 更新外部文件 source
    • 运行 npm run build 创造这些文物
    • 以信息承诺一切 @eyeo/片段 vX.X
    • 推动树枝 git push --set-upstream origin vX.X.X
  3. 在审查MR时,忽略 dist, (中文(简体) ), webext,以及 source - 这些总是不一样的
  4. 在 GitLab 中使用发布模板创建描述性发布 MR
  5. 一旦审查和批准,将释放分支合并为主挤压承诺 不删除分支
  6. 合并后, 手动触发管道中的发布任务: 它会负责发布标签并创建 gitLab 发布
  7. 如果 CI 中的发布命令失败: 退出 main中,拉,如果确定你有访问权和 a 2个FA 保护账户运行 :
    • npm login
    • npm publish

版本与发布记录

@eyeo/snippets 共发布 62 个版本,首次发布于 2022/03/30;过去 12 个月发布了 17 个版本。

版本发布日期距今
2.18.0latest2026/10/2321 天前
2.17.02026/10/121 个月前
2.16.02026/09/102 个月前
2.15.02026/08/172 个月前
2.14.02026/08/073 个月前
2.13.02026/07/144 个月前

关于 @eyeo/snippets 的常见问题

@eyeo/snippets 是什么?

ads 阻断器的眼/o片段

如何安装 @eyeo/snippets?

在项目目录运行 npm install @eyeo/snippets,或使用 pnpm add / yarn add / bun add。

@eyeo/snippets 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/eyeo__snippets 是否存在。

@eyeo/snippets 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@eyeo/snippets 可以商用吗?

@eyeo/snippets 使用 GPL-3.0-only 许可。强 Copyleft:分发包含该代码的软件时,整个作品需以 GPL-3.0 兼容许可开源,并附带专利与反锁定条款。仅内部使用不触发此义务。以上为概括,不构成法律意见,请以许可原文为准。

@eyeo/snippets 的下载量有多少?

根据 npm 官方下载统计,@eyeo/snippets 在 2026/10/14 – 2026/11/12 这 30 天内被下载 7,244 次,日均约 241 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@eyeo/snippets 还在维护吗?

最新版本 2.18.0 发布于 2026/10/23(21 天前);至今共发布 62 个版本,其中过去 12 个月发布了 17 个;首次发布于 2022/03/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。