news 2026/9/23 11:55:06

Return YouTube Dislike 贡献者开发指南:环境搭建、扩展构建与 Pull Request 提交流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Return YouTube Dislike 贡献者开发指南:环境搭建、扩展构建与 Pull Request 提交流程

Return YouTube Dislike 贡献者开发指南:环境搭建、扩展构建与 Pull Request 提交流程

【免费下载链接】return-youtube-dislikeChrome extension to return youtube dislikes项目地址: https://gitcode.com/gh_mirrors/re/return-youtube-dislike

本文以 Return YouTube Dislike 仓库的 CONTRIBUTINGpl.md(波兰语贡献指南)为核心骨架,结合仓库中的package.jsonwebpack.config.js、各浏览器 manifest 清单与源码目录,系统讲解从零搭建本地开发环境、编译扩展、运行测试,到提交 Issue 与 Pull Request 的完整贡献流程。读完本文,你将掌握该开源扩展的构建原理(webpack 如何产出各浏览器分发包)、代码格式化规范,以及项目维护者接受的 PR 类型与协作惯例,能够直接上手参与开发。

环境准备:Node 与 npm 版本要求

在开始贡献之前,需要先在本地安装 Node.js 与 npm,因为扩展的“打包版本”(bundled version)必须通过 Node 工具链编译生成。贡献指南记录的搭建时使用版本为:

  • node:12.18.4
  • npm:6.14.6

需要说明的是,这两个版本是文档撰写时的搭建环境记录。当前仓库的package.json已升级到 webpack 5、jest 28、prettier 3 等较新的开发依赖,从源码结构看,这些工具链通常需要更高版本的 Node.js 才能正常运行,因此建议在本地安装较新的 LTS 版本 Node,并以node -vnpm -v确认环境可用。

除构建工具外,项目还要求代码格式化统一使用Prettier,且采用默认配置。仓库根目录 package.json 中已经内置了 Prettier 的全局配置(printWidth: 120),并通过 husky + lint-staged 在提交前自动对所有变更文件执行prettier --write --ignore-unknown,这意味着只要遵循仓库现有格式风格,提交阶段会自动完成格式化矫正。

构建流程:从依赖安装到产出打包文件

第一步:安装依赖

进入仓库根目录执行:

npm install

该命令会根据根目录 package.json 安装全部依赖。其中dependencies包含扩展运行期用到的库(如country-code-lookupechartstopojson-clientworld-atlasus-atlas等,用于高级统计图表),devDependencies则包含构建与测试工具链(webpack、babel、jest、prettier、husky、lint-staged 等)。安装完成后即可进行编译。

第二步:编译构建

贡献指南给出了两种构建方式:

npm start // 创建构建文件并启动文件监听器,保存后热重载 // 或 npm run build // 一次性创建构建文件

需要特别注意当前仓库的实际脚本映射。根目录 package.json 中的start脚本目前仅输出提示信息,真正承担“开发监听模式”与“生产构建”职责的是以下两个脚本:

  • npm run dev:执行webpack --mode=development --watch,以开发模式编译并持续监听文件变化,保存源码后自动重新打包,适合日常开发调试;
  • npm run build:执行webpack --mode=production,一次性产出生产构建,适合发布前生成最终分发包。

因此,在当今版本中,开发调试请使用npm run dev,发布构建请使用npm run build。这与 Extensions/combined/readme.md 中“Compiling to Development / Compiling to Production”两节的说明一致。

构建产物与 webpack 配置解析

扩展的核心业务逻辑大部分位于bundled-content-script.js(即被各浏览器manifest.json引用的打包内容脚本)。当前版本中,webpack 实际打包的入口与产物由 webpack.config.js 定义:

const entries = ["ryd.content-script", "ryd.background", "popup", "ryd.changelog"];

即四个入口分别对应:

  • ryd.content-script:注入 YouTube 页面、负责点赞/点踩数据渲染的内容脚本;
  • ryd.background:后台脚本(Chrome 中作为 service worker,Firefox 中作为背景页);
  • popup:扩展弹窗界面;
  • ryd.changelog:更新日志页面。

所有产物输出到Extensions/combined/dist目录,文件名保持[name].js结构(如ryd.content-script.js)。构建同时通过CopyPluginExtensions/combined下的静态资源分别复制为chromefirefoxsafari三个子目录,并执行两项关键转换:

  1. manifest 转换manifestTransform):剔除 manifest 文件中的//注释后解析 JSON,并把manifestData.version替换为package.json中的版本号(process.env.npm_package_version,其中的-会被替换为.);
  2. i18n 转换i18nTransform):将各语言messages.json中的__RYD_VERSION__占位符替换为真实版本号。

此外,MirrorJsOutputsPlugin会在编译完成后把打包出的 JS 文件镜像复制到 chrome、firefox、safari 三个子目录,确保每个浏览器分发包都包含最新的内容脚本与后台脚本。

各浏览器 manifest 的差异

构建产物中三个子目录分别使用对应的 manifest 清单,便于理解扩展在各平台的权限模型差异:

  • Chrome(MV3):manifest-chrome.json 采用manifest_version: 3,后台使用service_worker: ryd.background.js,通过host_permissions声明对*.youtube.comreturnyoutubedislikeapi.com的访问,content_scripts匹配youtube.com域名并排除music.youtube.com
  • Firefox(MV2):manifest-firefox.json 采用manifest_version: 2,后台使用脚本数组ryd.background.js,权限中直接包含activeTabidentity与两个主机权限,web_accessible_resources暴露menu-fixer.js
  • Safari:manifest-safari.json 供 macOS Safari 转换使用,package.json中提供了npm run build:safari脚本,可在生产构建后调用xcrun safari-web-extension-converter生成 Safari 工程(该命令依赖 macOS 的 Xcode 环境)。

在本地调试时,可直接在浏览器扩展管理页“加载已解压的扩展”,选择Extensions/combined/dist/chrome(Chrome)或Extensions/combined/dist/firefox(Firefox)目录即可。

测试与代码质量保障

仓库通过 jest.config.js 配置了 Jest 测试框架(resetMocks: true),测试覆盖范围包括Extensions/combined/src/**/*.jsExtensions/combined/*.js。运行全部测试使用:

npm test

从源码目录结构看,测试文件与源码同目录放置,例如 Extensions/combined/src/utils.spec.js、Extensions/combined/src/bar.js 对应的功能均有.spec.js测试文件。若你新增或修改了核心逻辑(如点赞数格式化、按钮渲染、配置读取等),建议同步补充或更新对应的 spec 测试,并确保npm test全部通过后再提交。

代码风格方面,Prettier 承担统一格式化的职责,其默认配置以仓库根 package.json 的prettier字段为准。提交前 lint-staged 会自动格式化暂存文件,无需手工逐文件调整。

提交 Issue 的规范

如果使用扩展时遇到了问题,贡献指南要求遵循以下流程:

  1. 先搜索:在 Issues 列表中检索,确认该问题尚未被他人报告;
  2. 再提交:若确实无人报告,再新建 Issue。推荐使用 Issue 表单(form)填写,但并非强制。

如果你发现了一个自己有能力修复的 Issue,不必拘谨——直接打开一个带有修复内容的 Pull Request,并在 PR 描述中注明你所修复的 Issue,方便维护者关联追踪。

提交功能请求(Feature Request)的规范

功能请求与 Bug 报告的流程类似:

  1. 先搜索:提交前先检索仓库,确认该功能想法尚未被建议过;
  2. 再提交:若确属新想法,再打开功能请求,推荐使用功能表单填写,但非强制。

如果你找到了一个认为自己能够实现的功能想法,同样可以直接提交 PR,并在 PR 描述中说明你实现的具体功能,以便维护者评估。

项目接受哪些 Pull Request

贡献指南明确了维护者欢迎的 PR 类型,主要包括四类:

  • Bug 修复(Issue fixes):解决已报告问题的补丁;
  • 功能实现(Feature implementation):落实功能请求的新能力;
  • 文字改进(Typos or better words):修正拼写错误,或改用更准确、更易理解的措辞;
  • 网站贡献(Website contributions):对 Website 目录下的官方站点(Nuxt 项目,含多语言_locales翻译文件与各页面 Vue 组件)的改进。

这意味着除了扩展本身的代码,官方文档与网站本地化(如Website/_locales/*.ts翻译文件、Docs/下的多语言 FAQ)同样欢迎贡献者参与。

开发提交前的自检清单

综合贡献指南与仓库实际配置,提交代码前建议逐项确认:

  1. 格式:代码已由 Prettier 默认配置格式化(lint-staged 会在git commit阶段自动处理);
  2. 构建npm run build可成功产出Extensions/combined/dist下的 chrome、firefox、safari 分发包,且版本号正确注入 manifest 与messages.json
  3. 测试npm test全部通过,新增逻辑有对应 spec 覆盖;
  4. PR 描述:明确说明修复的 Issue 编号或实现的功能,便于维护者审查与关联。

遵循上述流程,你的改动将随下一个版本的扩展(或官方站点)一同发布,这正是 Return YouTube Dislike 作为开源项目持续演进的协作方式。

【免费下载链接】return-youtube-dislikeChrome extension to return youtube dislikes项目地址: https://gitcode.com/gh_mirrors/re/return-youtube-dislike

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

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

动力电池PACK量产痛点解析:激光焊接隐性缺陷漏检如何规避?

在动力电池PACK智能制造产线中,激光焊接是决定电池包结构强度、密封性能与电气安全的核心工艺。随着GB38031新国标落地,动力电池安全质控门槛大幅提升,传统人工目检、金相抽检的滞后式质检模式,已经无法适配规模化量产需求。 动力…

作者头像 李华
网站建设 2026/9/23 11:47:46

从T40EVB原理图到硬件设计:电源树、DDR4与MIPI全解析

简介:北京君正T40EVB原理图PDF,面向从事AIoT、机器视觉硬件开发的嵌入式工程师与方案设计人员。T40是面向AIoT的通用SoC,采用XBurst2双核架构并集成RISC-V协处理器,内置8TOPS算力的AI引擎,支持4K ISP和多摄像头同时输入…

作者头像 李华
网站建设 2026/9/23 11:32:19

Atlas 300V 24G部署YOLO全攻略:从推理加速卡选型到性能调优

最近后台好几个朋友都在问同一个问题:Atlas 300V 24G到底算不算运算加速卡,还有人在网上搜“atlas部署yolo”却被一堆软文绕得云里雾里。说实话,这个问题我太有发言权了,去年开始我把公司几条视频结构化业务从GPU迁移到昇腾推理卡…

作者头像 李华
网站建设 2026/9/23 11:28:19

2026小程序商城平台选型指南:从SaaS到uniapp的快速开发方案

去年帮一家做食品礼盒的客户选商城技术方案,前前后后对比了七八个平台,从有赞、微盟,到原生微信小程序、uniapp,再到低代码平台,折腾了大半个月,最后才把方案定下来。后来在社群和掘金上分享选型过程&#…

作者头像 李华
网站建设 2026/9/23 11:28:09

页面置换算法详解:从LRU到Clock,操作系统内存优化的核心

内存不够用的时候,操作系统到底在忙什么?很多时候你盯着一个无响应的小球转圈,背后极有可能就是操作系统在内存和磁盘之间疯狂搬运页面,也就是在做页面置换(淘汰)算法该干的事。在内存管理这摊事里&#xf…

作者头像 李华