@ 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 为:
两者 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 通过下列步骤:
- 确保内部源代码和寄存点 在发布代码,我们希望作为模块运送
- 从
main,运行发行准备脚本 :
脚本将以下步骤自动化(并在第5步暂停进行人工干预):./prepare-release.sh [major|minor|patch] [path-to-abp-snippets/source]- 创建分支
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
- 创建分支
- 在审查MR时,忽略
dist, (中文(简体) ),webext,以及source- 这些总是不一样的 - 在 GitLab 中使用发布模板创建描述性发布 MR
- 一旦审查和批准,将释放分支合并为主挤压承诺 不删除分支
- 合并后, 手动触发管道中的发布任务: 它会负责发布标签并创建 gitLab 发布
- 如果 CI 中的发布命令失败: 退出
main中,拉,如果确定你有访问权和 a 2个FA 保护账户运行 :npm loginnpm publish