新闻详情

新闻详情

首页 / 资讯中心 / 详情

参与 BiliTools 开源贡献:从 Issue 提报到 PR 合并的完整开发向导

发布时间:2026/10/1 15:00:35来源:尧图网络
参与 BiliTools 开源贡献:从 Issue 提报到 PR 合并的完整开发向导
桌面应用音视频【免费下载链接】BiliTools本项目已停止维护。项目地址https://gitcode.com/GitHub_Trending/bilit/BiliTools点击查看免费下载BiliTools 是一款基于 Tauri 2 Vue 3 Rust 的跨平台哔哩哔哩工具箱桌面应用与独立文档站点并存。本篇指南以仓库根目录的 CONTRIBUTING.md 为骨架完整梳理项目的问题反馈渠道、Pull Request 提交规范、前后端开发环境搭建、文档开发流程、提交前质量检查清单并结合仓库源码package.json、src-tauri/src/lib.rs、docs/config.ts 等解释每一项规范背后的工程原因。读完本文你将能独立完成一次从发现问题 → 提交 Issue → 本地开发 → 质量检查 → 提交 PR的完整贡献闭环。一、贡献总览两种参与路径BiliTools 的贡献指南将参与方式分为两类各自对应不同的通道与处理优先级场景通道要求功能请求Feature Request或 bug 报告创建 Issue使用官方 Issue 模板尽可能提供详细复现步骤一般性问题求助如xxx 无法下载xxx 报错发起 Discussion不属于明确的 bug 或功能需求进入讨论区交流指南明确要求不要在 Issues 中提交与项目无关的内容这是保证 issue 列表可检索、可追踪、可被后续贡献者复用的基础。同时由于项目属于免费公益性质、维护者时间与精力有限无法承诺所有问题都能被快速处理——这要求贡献者在提问前尽量做到问题描述清晰准确、错误信息充足否则维护者将很难定位与复现问题。从仓库现状看docs/config.ts 的导航配置中专门设有参与贡献入口指向仓库根目录的CONTRIBUTING.md说明该指南是项目对外协作的官方入口与文档站、更新日志并列是贡献者入门的第一份材料。二、Pull Request 规范分支、签名与提交信息分支策略只提交dev不提交masterPR 必须提交至主仓库的dev分支禁止提交至master分支。这是典型的两分支策略master仅承载稳定发布版本dev汇聚所有开发中的变更经合入与验证后才会发布。为dev之外的长期分支或master直接提 PR 会被要求修改目标分支。所有提交必须签名Signed-off所有提交必须签名意味着每个 commit 都需要通过 Git 的--signoff机制或配置 GPG/SSH 签名附带签名信息用于声明代码来源与作者授权。签名是开源项目常见的法律与追溯手段请在提交前确认你的本地 Git 已正确配置签名。约定式提交Conventional Commits所有提交信息必须遵循约定式提交规范即type: description的结构。指南给出了五种示例type示例语义featfeat: add notifications support for macOS新增功能fixfix: ffmpeg path handling issue修复缺陷chorechore: cleanup unused assets杂务清理、构建配置等refactorrefactor: simplify error handling重构但不改变行为docsdocs: update install guide文档变更prefpref: improve playurl parsing speed性能优化注pref是约定式提交中的非标准 type属于本项目自定义的惯用写法对应常规的perf在参与提交时建议沿用仓库现有风格。描述部分使用祈使句、小写开头聚焦做了什么而非做了什么以及为什么。标准化的提交信息直接服务于自动化工具链本项目 scripts/updatelog.mjs 用于生成更新日志对应pnpm ci:updatelogscripts/binaries.mjs 负责管理随包分发的二进制资源规范的提交信息能让这些脚本稳定解析变更类型。PR 提交流程Fork 主仓库并克隆到本地为更改创建独立的新分支建议按功能或修复命名如feat/xxx、fix/xxx按照上述约定式提交规范逐条提交更改将分支推送到你的 Fork随后在主仓库基于dev分支打开 Pull Request。三、开发环境搭建版本门槛与平台依赖BiliTools 是 Tauri 2 桌面应用前端 Vue 3 后端 Rust开发环境需要同时满足两端要求。指南明确列出两个硬性版本门槛Rust 1.80.0后端语言最低版本低于该版本将无法通过编译Node.js 20.0前端工具链最低版本与根目录 package.json 中engines: { node: 20.0.0 }的声明一致包管理器为pnpm仓库根目录 package.json 声明packageManager: pnpm10.25.0并由 pnpm-workspace.yaml 定义 workspace。环境搭建请参照 Tauri 官方文档的前置依赖说明各平台所需的系统级依赖Windows 的 WebView2、macOS 的 Xcode Command Line Tools、Linux 的 webkit2gtk 等。若对具体版本命令有疑问可对照 src-tauri/Cargo.toml 与 package.json 的依赖声明。Ubuntu 系统额外依赖在 Ubuntu 上除 Tauri 通用前置依赖外还需安装以下包sudo apt-get install -y libwebkit2gtk-4.1-dev libayatana-libappindicator3-dev librsvg2-dev patchelflibwebkit2gtk-4.1-devWebView 渲染引擎开发头文件Tauri 2 在 Linux 上依赖 WebKitGTK 4.1libayatana-libappindicator3-dev系统托盘Tray与 AppIndicator 支持librsvg2-devSVG 渲染支持用于应用图标与界面资源patchelf发布打包时调整 ELF 二进制 rpath 的工具Tauri 打包流程必需。四、App 开发工作流安装、启动与构建在项目根目录执行以下三步即可完成从安装到构建的完整开发循环# 1. 安装前端依赖 pnpm install # 2. 启动开发服务器会同时拉起 Tauri 窗口与 Vite HMR pnpm dev # 3. 构建发布版本 pnpm build这三条命令在根目录 package.json 中均有对应脚本定义dev: cross-env RUST_BACKTRACE1 tauri dev开启 Rust 回溯信息便于调试并调用tauri devbuild: tauri build完整构建桌面发布产物另有build:debug: tauri build --debug可产出调试构建pnpm dev实际由 Vite 承载前端见 vite.config.ts其开发服务器固定使用1420 端口strictPort: true端口被占用会直接失败HMR 走 1421 端口WebSocket且配置了ignored: [**/src-tauri/**]让 Vite 忽略 Rust 目录的变更监听。从源码结构看Tauri 进程的入口分为两层src-tauri/src/main.rs 仅做平台窗口属性设置Release 下 Windows 隐藏控制台并调用bilitools_lib::run()真正的初始化逻辑在 src-tauri/src/lib.rs其中通过collect_commands!注册了init、config_write、sms_login、submit_task、plan_scheduler等约二十个后端命令在 debug 构建下使用tauri-specta将 Rust 类型自动导出为 TypeScript 绑定到 src/services/backend.ts这意味着修改后端命令后前端类型提示会自动同步这也是为什么贡献前端代码时无需手写重复的类型定义注册了 log、clipboard、dialog、http、notification、opener、os、process、shell、single-instance、updater 等插件setup中异步执行storage::init()与services::init()后者在 src-tauri/src/services.rs 中会依次初始化aria2c与ffmpeg并做可用性测试。如果你只调试前端而不想拉起桌面窗口还可以使用pnpm web:dev纯 Vite、pnpm web:buildvue-tsc --noEmit vite build含类型检查、pnpm web:preview。五、文档开发基于 VitePress 的独立 workspace项目文档是一个独立的 VitePress 站点位于根目录docs文件夹且作为 pnpm workspace 的子包名为btjawa/bilitools-docs见 docs/package.json。# 启动文档开发服务器带热更新 pnpm docs:dev # 构建文档站点 pnpm docs:build两条命令经由根目录 package.json 转发到子包docs:dev: pnpm --filter btjawa/bilitools-docs dev即vitepress dev .docs:build: pnpm --filter btjawa/bilitools-docs build即vitepress build .另有pnpm docs:preview可预览构建产物。文档站点的主题配置位于 docs/config.ts站点语言为 zh-CN标题为 BiliTools侧边栏按快速开始 / 须知 / 资源下载 / 工具箱 / 设置页 / 常见问题组织导航并开放了editLink在 GitHub 上编辑此页与lastUpdated最后更新于功能——这意味着为文档贡献内容时应保持与现有指南目录docs/guide一致的组织方式例如补充功能说明时优先考虑归入对应指南页而非另起孤立的页面。贡献文档同样需要遵循约定式提交docs: ...且文档属于参与贡献的一部分质量要求与代码一致。六、提交前质量检查四道关卡无论贡献代码还是文档在提交更改前必须依次运行以下四个命令并确保全部通过pnpm lint # ESLint 静态检查前端代码 pnpm format # Prettier 全仓格式化 pnpm clippy # Rust Clippy 严格检查 pnpm rustfmt # Rust 代码格式化对照根目录 package.json 可看到这些脚本的精确实现lint: eslint src仅对src目录执行 ESLintlint:fix: eslint src --fix可自动修复。配套的 eslint.config.ts 是扁平化flat config配置集成了typescript-eslint与eslint-plugin-vueformat: prettier --write .对整个仓库运行 Prettierformat:check: prettier --check .可在 CI 中做只读校验clippy: cargo clippy --manifest-path ./src-tauri/Cargo.toml --all-targets --all-features -- -D warnings以-D warningswarning 升级为 error的严格模式检查 src-tauri 下所有 target 与 feature任何 lint 警告都会导致失败rustfmt: cargo fmt --manifest-path ./src-tauri/Cargo.toml对应只读校验为rustfmt:check: cargo fmt --manifest-path ./src-tauri/Cargo.toml --check配合 src-tauri/rustfmt.toml 使用。这四道关卡在语义上分别覆盖前端语法与规范lint、全仓格式统一format、Rust 代码质量clippy、Rust 格式rustfmt。全部通过后再按上文Pull Request章节提交。七、技术选型与代码风格前后端各有章法前端TypeScript 优先 Composition API贡献指南的前端要求可以浓缩为两条原则原则一优先 TypeScript 而非 JavaScript。理由是其更强的类型系统能在开发阶段发现潜在错误、提升可维护性。落实为两条硬性写法使用.ts文件而非.js文件在.vue文件中为script标签添加langts属性script langts /script原则二使用 Composition API 而非 Options API。落实方式是为script标签添加setup属性script langts setup /script这一风格在仓库中得到普遍践行。以通用开关组件 src/components/Switch.vue 为例它正是script langts setup写法并通过defineModelboolean()实现 v-model 双向绑定全局搜索显示src/components 下的Popup.vue、Queue.vue、Scheduler.vue、Task.vue、Filter.vue、MediaList.vue、ContextMenu.vue等绝大多数 Vue 组件均采用该写法。此外前端状态管理采用 Pinia见 src/store/index.ts其中useAppStore、useQueueStore、useSettingsStore、useUserStore、useComponentsStore按业务域拆分路由配置集中在 src/router/index.ts注册了userPage、searchPage、historyPage、downPage、settingsPage、infoPage六个视图后端自动导出的类型绑定 src/services/backend.ts 为前端提供了带类型的 invoke 封装贡献前端代码时应直接复用这些类型而不是另写any。后端anyhow 错误体系远离 unwrapRust 后端的代码风格要求优先使用anyhow::Result代替标准库Result利用其轻量的错误上下文能力尽量少用unwrap()改用?运算符向上冒泡传递错误关键逻辑使用anyhow::Context添加报错上下文让错误链可读、可定位。这一规范与仓库的错误处理架构完全对应自定义错误类型TauriError定义在 src-tauri/src/errors.rs它通过impl FromE for TauriError where E: Intoanyhow::Error将任何anyhow::Error自动转换为携带code、message、stack三字段的前端可读错误结构stack字段还会用正则对 backtrace 做裁剪只保留bilitools_lib内部帧避免向用户暴露过长的系统级堆栈。也就是说贡献者在 Rust 端写好?与.context(...)最终错误会以结构化形式传到前端展示。与之配套src-tauri/src/services.rs 中aria2c::init()、ffmpeg::test()均返回anyhow::Result并在初始化失败时通过process_err包装错误。代码示例合规自查提交 Vue 代码前可对照上文模板自查script langts setup // 使用 TypeScript Composition API const visible defineModelboolean({ default: false }); /script八、关于 AI可辅助不可代劳指南对 AI 辅助开发给出了明确边界请勿提交完全由 AI 生成、且未经本人理解、测试与检查的代码。AI 工具可以提升开发效率但不应负责编写全部代码。最终提交的代码必须满足符合项目整体的代码风格即上文第七节的 TS/Composition API/anyhow 规范经过充分测试、检查与验证对应第六节的四道质量关卡以及功能层面的实际运行验证可以由作者本人清楚解释其实现逻辑可解释性是代码可维护与可 review 的前提。这一政策与开源协作的 review 机制互为表里代码最终会由维护者在 PR 中审阅只有作者真正理解并验证过的代码才能在评审中经得起追问、在后续维护中经得起演进。九、贡献者行动清单将上文内容压缩为一份可直接执行的清单确定通道明确 bug/功能 → 开 Issue 并提供复现步骤一般求助 → 发 Discussion勿在 Issues 中发无关内容。准备环境Rust 1.80.0、Node.js 20.0、pnpmUbuntu 额外安装libwebkit2gtk-4.1-dev libayatana-libappindicator3-dev librsvg2-dev patchelf。本地开发pnpm install→pnpm dev或按需pnpm web:dev文档类改动使用pnpm docs:dev。自测与格式化pnpm lint、pnpm format、pnpm clippy、pnpm rustfmt四连通过clippy 为-D warnings严格模式。提交commit 全部签名信息遵循约定式提交feat/fix/chore/refactor/docs/pref从 Fork 的新分支向主仓库dev分支发起 PR。对 AI 生成代码负责确保自己理解、测试并能为实现逻辑作出解释。遵循上述流程你的每一次贡献——无论是修复一个 aria2c 路径处理问题对应fix: ffmpeg path handling issue这类提交还是补一篇安装指南对应docs: update install guide都能被项目快速接纳并沉淀到下一个发布版本中。赞分享桌面应用音视频【免费下载链接】BiliTools本项目已停止维护。项目地址https://gitcode.com/GitHub_Trending/bilit/BiliTools点击查看免费下载相关推荐Argilla 开源贡献指南从 Issue 提报到 PR 合并的完整工作流Argilla 开源贡献指南从 Issue 提报到 PR 合并的完整工作流 本篇指南围绕 Argilla 仓库的官方贡献文档 docs/_source/co数据标注人工智能NLPMLOpsRAGMCP Python SDK 贡献指南从 Issue 提报到 PR 合并的完整开发流程MCP Python SDK 贡献指南从 Issue 提报到 PR 合并的完整开发流程 导读 本文是 CONTRIBUTING.md https://link人工智能MCP 服务MCP Clientsjsdiff开发贡献指南从Issue提交到PR合并的完整流程jsdiff开发贡献指南从Issue提交到PR合并的完整流程 项目概述 jsdiff是一个JavaScript文本差异比较库A javascript tex开发者工具版本控制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CentOS 7 升级 OpenSSH 9.0p1:源码/RPM与配置迁移 2026/10/1 16:35:50

CentOS 7 升级 OpenSSH 9.0p1:源码/RPM与配置迁移

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
多Agent协作开发AI编程:架构师与代码审查Agent为何被砍掉 2026/10/1 16:35:50

多Agent协作开发AI编程:架构师与代码审查Agent为何被砍掉

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
C#合同管理系统源码解析:数据库还原、连接串配置与到期提醒实现 2026/10/1 16:35:50

C#合同管理系统源码解析:数据库还原、连接串配置与到期提醒实现

简介:一套基于C#与SQL Server数据库开发的合同管理系统完整源码包,主要面向C#初学者、软件课程设计及毕业设计参考。系统围绕客户、项目、合同信息及合同执行控制等模块设计,将各功能模块相互连接组成合同数据管理流程,明确区分管…

阅读更多 →
数据仓库与数据挖掘实战认知地图:主题域驱动的业务解题法 2026/10/1 16:35:50

数据仓库与数据挖掘实战认知地图:主题域驱动的业务解题法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SUMO仿真启动手册:net.xml与rou.xml生成原理与工程实践 2026/10/1 16:35:50

SUMO仿真启动手册:net.xml与rou.xml生成原理与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
CorelDRAW X4-X6 Win10菜单白化修复方案 2026/10/1 16:35:43

CorelDRAW X4-X6 Win10菜单白化修复方案

简介:本资源是专为 Windows 10 系统下 CorelDRAW X4/X5/X6 用户设计的界面优化工具包,解决高版本 CDR 在 Win10 中顶部菜单栏显示为纯白色、影响操作可视性与使用体验的核心问题。适用于平面设计初学者及长期使用旧版 CDR 的专业用户,无需重装…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉