- 前端
【免费下载链接】beaker
An experimental peer-to-peer Web browser
导读
Beaker 是一款实验性的点对点(peer-to-peer)Web 浏览器,它的内核以 Electron 构建,支持hyper://与dat://协议驱动的去中心化网站。本文以项目根目录的 CONTRIBUTING.md 为主线,系统讲解参与 Beaker 开发所需的完整路径:从环境准备、源码编译、日常开发命令,到调试后台进程与浏览器界面,再到提交 Pull Request 与参与社区治理。读完本文,你将具备独立搭建 Beaker 开发环境、定位问题并提交高质量代码贡献的实操能力。
一、Beaker 需要什么样的贡献
Beaker 欢迎任何形式的贡献,而不仅仅是代码。官方文档明确列出的贡献类型包括:
- QA(质量保障):提交 bug 报告。细节越丰富越好,例如附带打开控制台(DevTools)的截图,能显著提升问题定位效率。
- 社区建设:在 meetup 上介绍该项目,或为本地社区组织专门的 meetup。
- 代码贡献:关注 GitHub 上的 open issues。即使不能写代码,在 issue 下评论、表达你对某个问题的关注同样有价值,这有助于维护者进行 issue 分流(triage)。
- 资金支持:项目通过 Open Collective 平台透明地接受财务捐赠。
如果你准备着手开发 Beaker,可以先观看官方的入门视频,再阅读构建笔记。从仓库当前的归档状态看(参见 archive-notice.md),文档中提到的build-notes.md已不在仓库内,构建步骤请以本文与 scripts/package.json 中的脚本定义为准。
二、构建前的环境准备
2.1 基础要求:Node 12+
从源码构建 Beaker 要求Node 12 或更高版本。开发工具链围绕 Electron 11 与 Gulp 4 组织,这在 scripts/package.json 中可以看到:
electron: 11.0.0-beta.18:开发运行时锁定为 Electron 11 beta;gulp: ^4.0.0:构建任务编排器;- 配套的
browserify、rollup、gulp-less、eslint等用于前端打包、样式编译与代码检查。
2.2 Linux / macOS:安装原生编译依赖
在 Linux(部分 macOS 场景同样需要)上,Beaker 依赖libtool、m4和automake来编译原生模块:
# Debian / Ubuntu sudo apt-get install libtool m4 make g++ # Fedora sudo dnf install libtool m4 make gcc-c++这些工具链用于编译sqlite3、sodium-native等原生依赖——其中sqlite3是 Beaker 本地资料库(profile-data DB)的核心存储引擎(参见 app/bg/dbs/index.js 与 app/package.json 中的依赖清单)。
2.3 Windows:配置编译工具链
在 Windows 上,需要安装:
- Python 2.7
- Visual Studio 2015 或 2017
- Git
随后执行以下 PowerShell 配置,让 node-gyp 能找到正确的工具链:
npm config set python c:/python27 npm config set msvs_version 2015 npm install -g node-gyp npm install -g gulp官方还推荐了windows-build-tools包来简化 Windows 原生模块的编译环境搭建。值得注意的是,仓库的 appveyor.yml 是面向 Windows 的 CI 配置,从中可以观察到项目在 Windows 上持续集成时使用的具体环境。
三、从源码构建与启动
3.1 标准构建流程
按官方文档,完整构建步骤如下:
git clone https://github.com/beakerbrowser/beaker.git cd beaker/scripts npm install npm run rebuild # 参见 electron 官方 issue #5851 npm start其中几个步骤的底层行为,可以结合仓库源码看清楚:
npm install(scripts 目录):会触发 scripts/package.json 中的postinstall钩子:"postinstall": "cd ../app && npm install && cd bg/dat/converter && npm install"也就是说,它并非只安装构建工具,而是会级联安装
app(Electron 应用主体)与bg/dat/converter(dat 转换工具)的依赖。Beaker 的应用代码位于 app/ 目录,其主入口是main.build.js(见 app/package.json)。npm run rebuild:映射为gulp rebuild。查看 scripts/tasks/rebuild.js 可以发现它做的事情比"重新编译"更多:- 将
sqlite3通过npm rebuild以 Electron 运行时为目标重新编译:--runtime=electron --target=11.0.0-beta.18 --disturl=https://electronjs.org/headers --build-from-source; - 在 macOS 上额外设置
CXXFLAGS/LDFLAGS为-mmacosx-version-min=10.10(保证拼写检查等模块在低版本 macOS 上也能编译); - 将
HOME指向~/.electron-gyp,用于缓存 Electron 头文件; - 最后执行
npm run build(gulp build)。
这正是文档中链接到 Electron issue #5851 的原因——Electron 环境下必须用 Electron 的头文件重新编译原生模块,否则会出现 ABI 不兼容。
- 将
npm start:映射为gulp start,最终由 scripts/tasks/start-cli.js 直接spawnElectron 进程,并传入--js-flags="--throw-deprecation"。同时该脚本会设置环境变量BEAKER_DEV_MODE=1,Beaker 的后台逻辑会读取它来切换开发模式行为(例如 app/bg/ui/window-menu.js 中对getEnvVar('BEAKER_DEV_MODE')的判断)。另外,它还支持通过环境变量ELECTRON_PATH覆盖要启动的 Electron 可执行文件路径。
3.2 依赖损坏的"核武器":burnthemall
如果你从仓库拉取最新代码后遇到各种诡异的模块报错,官方给出的终极方案是:
npm run burnthemall这个命令调用 scripts/tasks/burnthemall.js。从源码看,它会:
- 删除
scripts/与app/两个目录下的node_modules/以及package-lock.json; - 依次执行
npm install→npm run rebuild→npm run build; - 完成后自动
process.exit(0),此时npm start即可正常启动。
之所以叫"烧光一切"(burnthemall),是因为它把所有依赖目录与锁文件一把火烧掉、再完整重装重编译。它不依赖任何第三方模块(脚本内以手写rimrafSync的方式递归删除目录),因此即使node_modules已损坏也能正常执行。注意它同样会清掉app/package-lock.json,所以请确保本地的应用源码没有未提交的依赖改动。
3.3 开发模式:watch 自动构建
日常开发时,使用npm run watch(即gulp start-watch)可让资源自动构建并启动浏览器。从 scripts/tasks/start.js 可以看到start-watch由gulp.series('watch', start)组成——先执行watch任务监听资源变更、自动重新构建,再启动 Electron。这意味着改完前端资源后无需手动反复执行构建命令。
四、调试 Beaker 的三种姿势
Beaker 是 Electron 应用,调试需要区分"哪个进程、哪一层面":
调试后台进程(background process):后台进程承载了 Beaker 的数据库、网络栈、协议处理等逻辑(源码位于 app/bg/)。用
--inspect参数启动 Electron,并指向app目录:script/node_modules/.bin/electron --inspect app随后即可用外部调试器(如 Chrome DevTools)附加到后台进程。这与 scripts/tasks/start-cli.js 中预留的
--inspect注释是同一思路。调试浏览器外壳(shell window):即 Beaker 自身的浏览器界面(标签栏、地址栏等,见 app/fg/shell-window/),按下
CmdOrCtrl+Alt+Shift+I打开 DevTools。调试内置页面(built-in pages):例如设置页(app/userland/settings/)、资料库页(app/userland/library/)等内置应用页面,按下
CmdOrCtrl+Shift+I打开 DevTools。
简而言之:外部调试器附加后台进程,快捷键打开界面层 DevTools——这对应了 Electron 应用中"主进程 / 渲染进程"的分层调试思路。
五、提交代码:Pull Request 规范
任何代码改动都应通过 Pull Request 提交,并遵循以下要求:
- PR 描述要完整:说明代码做了什么、给出可执行的复现/验证步骤。
- 按需附带测试:PR 应包含适用的测试。例如修改 Beaker UI 的 PR 通常不需要测试,但改动网络栈(networking stack)的 PR 则必须包含测试。仓库中已有测试示例可以参考 tests/(如
session-perms-test目录),配合 scripts/package.json 中的lint脚本(基于 ESLint,自动忽略color-thief.js、app/node_modules、vendor、*.build.js、assets等目录),在提交前先跑一遍代码检查是稳妥的做法。 - 先搜索再提问:动手前先在 issue 列表搜索,确认是否已有同类问题或进行中的讨论。
六、代码评审流程
Beaker 的评审原则是:PR 越大,评审和合入的时间越长。因此:
- 尽量把大型改动拆分成更小、更易评审的多个 PR;
- 在 PR 中说明背景:这个改动是为了解决什么问题、为什么对你有意义。
提供充分的上下文,能显著加快维护者的评审速度。
七、财务贡献与社区支持
Beaker 通过 Open Collective 接受完全透明的财务捐赠:
- 捐赠:任何人可以向项目捐赠资金。
- 报销:任何人都可以提交一笔费用(expense)。如果这笔费用对社区发展有意义,核心贡献者会在 Open Collective 账本中将其"合并",提交费用的人将获得报销。
遇到问题时,官方建议优先在 issue 中提问(先快速搜索,避免重复提问),也可以通过 Twitter(@BeakerBrowser)、freenode 的#beakerbrowser频道或项目邮箱联系维护团队。
八、致谢与社区生态
CONTRIBUTING.md 还专门致谢了三类人群:
- Contributors(贡献者):所有为 Beaker 提交过代码或文档的人;
- Backers(赞助者):持续为项目提供资金支持的个体;
- Sponsors(企业赞助商):通过企业赞助方式支持项目发展的公司。
这套致谢体系与 Open Collective 的捐赠/报销机制共同构成了 Beaker 的社区治理骨架——这也解释了为什么该文档要求任何形式的贡献(QA、社区、代码、资金)都被同等重视。
九、小结:从零到贡献的完整路线图
综合全文,参与 Beaker 的路线可以概括为五步:
- 准备环境:Node 12+;Linux/macOS 安装
libtool/m4/automake,Windows 配置 Python 2.7 + VS 2015/2017 + Git; - 构建运行:在
scripts/下依次执行npm install→npm run rebuild→npm start;遇到依赖问题用npm run burnthemall重置,日常开发用npm run watch; - 调试定位:
--inspect调试后台进程,CmdOrCtrl+Alt+Shift+I调试外壳界面,CmdOrCtrl+Shift+I调试内置页面; - 编写 PR:小步提交、描述完整、按需附测试,遵守 ESLint 检查;
- 融入社区:通过 issue 提问/分流,必要时以 Open Collective 方式支持项目。
对照 scripts/tasks/ 下的实际实现,本文所有命令均与仓库脚本一一对应,可作为你搭建 Beaker 开发环境的可靠参考。
- 前端
【免费下载链接】beaker
An experimental peer-to-peer Web browser
相关推荐
Magisk装在A/B分区手机行不行?三星与双槽设备的Root完整指南
Magisk装在A/B分区手机行不行?三星与双槽设备的Root完整指南 可以,而且比单槽设备更省心——这是新手用 Magisk 玩 Root 时最常问的问题之一
移动开发系统底层packwiz 安装与配置:10分钟快速入门指南
packwiz 安装与配置:10分钟快速入门指南 packwiz 是一个强大的命令行工具,专门用于创建和管理 Minecraft 模组包。它采用 Git 友好的
4 步把 360P 老视频升级到 4K:Video2X 超分与插帧免费完整指南
4 步把 360P 老视频升级到 4K:Video2X 超分与插帧免费完整指南 几年前用旧笔记本录的 360P 游戏集锦,现在看全是马赛克,还能救吗?能。开源工
音视频视频处理图像处理深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考