ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

三步装好 Bilibili-Evolved:让 B 站增强脚本按你的意愿运转

三步装好 Bilibili-Evolved:让 B 站增强脚本按你的意愿运转

三步装好 Bilibili-Evolved:让 B 站增强脚本按你的意愿运转

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

写给想自己掌控 B 站页面体验的新手。Bilibili-Evolved 是一款运行在油猴脚本管理器里的哔哩哔哩增强脚本:装完只是个空壳,下载、夜间模式、首页重构等全部功能以组件形式由你自行装配。下文讲清如何安装、能解决哪些问题、组件之间如何协作,以及常见问题怎么处置。

项目快照

一句话:装得少、跑得快、坏了能换。

字段内容
一句话定位运行在油猴脚本管理器中的哔哩哔哩增强脚本
项目形态带组件库的 UserScript(组件 / 插件 / 样式三类可装配单元)
适用对象需要下载、排版、直播、播放增强的 B 站用户
安装方式Tampermonkey 或 Violentmonkey 中安装 .user.js 脚本
核心亮点功能自由装配、加载时机可调、组件间数据注入互通
官方仓库https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

快速上手:前提、安装与验证清单

先确认环境达标,再装脚本,最后对照清单验收。

前提条件:

  • 浏览器:最新版 Chrome 或 Firefox(Safari 未保证,套壳类浏览器不保证稳定)
  • 脚本管理器:Tampermonkey 5.0 及以上,或 Violentmonkey 2.18 及以上;Greasemonkey 与 AdGuard 官方标注不兼容
  • 默认只对登录态做适配,使用前请先登录 B 站
  • 最低配置:8GB 内存、1920×1080 分辨率、10MB/s 网络

安装三步:

  1. 在 Tampermonkey / Violentmonkey 中新建脚本,通过仓库 README 提供的安装链接导入正式版脚本;
  2. 刷新任意 B 站页面;
  3. 打开页面左侧中央的设置面板,进入左下的组件/插件/样式管理,按需安装功能(支持批量粘贴直链、载入本地文件、打开在线仓库窗口三种方式)。

装好的判定标准:

  • 页面左侧中央出现功能面板与设置面板入口
  • 控制台输入window.bilibiliEvolved能打印出对象
  • 设置面板中能看到主题颜色、功能加载模式等通用设置项

能力全景:按你想解决的问题找组件

别记目录,记场景:想解决什么问题,就去哪一类找。

下载视频、音频和弹幕

  • 什么时候用:想把视频、音频、弹幕保存到本地。带来什么效果:直接对接 B 站 DASH 流下载,可单独下载音频、自定义扩展名;部分播放环境解不了 HEVC/AV1 时,回退编码默认 AVC 能保住可用性。入口:组件管理安装「下载视频」(源码见 registry/lib/components/video/download/index.ts)。
  • 什么时候用:只要弹幕不要视频。效果:下载 ASS 格式弹幕文件;注意官方文档写明 ASS 弹幕下载不会包含高级弹幕、字幕弹幕。入口:「下载弹幕」组件。

整理首页与动态流

  • 什么时候用:动态信息流太长、想按类型或关键词筛选。效果:动态过滤器按规则过滤动态流并移除侧边卡片。入口:「动态过滤器」组件。
  • 什么时候用:不想要默认首页布局。效果:首页重构提供 fresh 与 minimal 两套方案,把信息流重排成卡片布局。入口:「首页重构」组件,效果图如下。

替换顶栏导航

  • 什么时候用:嫌默认顶栏不够用或太乱。效果:整条替换 B 站顶栏,内部按首页、搜索、用户信息、设置等子模块拆分,支持透明填充等选项。入口:「自定义顶栏」组件。

夜间使用

  • 什么时候用:深夜看 B 站眼睛难受。效果:全站点暗色适配,从 2018 年的功能延续至今,目录内自带完整的配色规范与选择器约束,适合照着改。入口:「夜间模式」组件,规范见 registry/lib/components/style/dark-mode/README.md。

直播场景增强

  • 什么时候用:看直播需要音量、水印、弹幕面板层面的调整。效果:前后台音量分离、礼物盒子、直播间去水印、弹幕面板适配等组件集中在直播分类下,配合脚本内置的直播 WebSocket 封装做弹幕收发(src/components/live/live-socket.ts)。

核心设计:两个机制撑起整套装配体系

机制一:加载时机可调,且单组件故障互相隔离。

现象:装了一批组件后,页面首屏不会明显变卡;个别组件报错时,其余组件照常工作。

原理:所有组件由loadAllComponents统一拉起,入口是 src/components/component.ts。通用设置里的「功能加载模式」决定拉起时机,只有两档:

if (generalSettings.scriptLoadingMode === LoadingMode.Delay) { fullyLoaded(() => loadComponents() ...) // 延后: 等 load 事件 } else if (generalSettings.scriptLoadingMode === LoadingMode.Race) { contentLoaded(() => loadComponents() ...) // 同时: DCL 即跑 }

「延后」等load事件后加载,不和页面抢资源;「同时」在 DOMContentLoaded 就启动,组件生效更早,但可能与 B 站原脚本竞争。每批组件的加载用Promise.allSettled包裹,拒绝的 Promise 只打印失败组件名和错误,不阻断其他组件。

类比:像买票排队。选「延后」是等队伍排空再进,大厅里没人跟你抢;选「同时」是开门就冲进去,快一点,但可能和原队伍的人挤在一起。

机制二:组件之间靠数据注入互通,互不引用。

现象:装上「下载弹幕」后,「下载视频」的下载列表里多出一个选项;卸载后选项消失。两边源码没有任何 import 关系。

原理:数据注入 API 有三个动作(src/plugins/data.ts):接收方registerData(key, ...data)交出可被修改的对象,提供方addData(key, provider)提交修改,getData(key)时统一应用。修改是单向累加的,项目文档给的比喻很贴切:只能git commit,不能git reset。

plugin: { displayName: '下载视频 - 下载弹幕支持', setup: ({ addData }) => { addData('downloadVideo.assets', async (assets) => { assets.push({ name: 'downloadDanmaku', ... }) }) }, },

类比:像共享白板。下载视频组件把"资产清单"挂在白板上,弹幕组件拿笔加一行,装完即生效;擦掉(卸载)白板恢复原样。代码出处:registry/lib/components/video/danmaku/download/index.ts。另一条通道是钩子机制addHook/getHook(before/after 两段式),典型用途是自动更新组件挂在用户组件安装钩子上记录来源。

上手验证:5 分钟用开发者模式定位加载大户

目标:亲眼看到每个组件的加载耗时,并验证调整生效。

操作步骤:

  1. 打开设置面板,在「设置面板」组件的选项里打开「开发者模式」(devMode);
  2. 刷新任意 B 站页面,打开浏览器控制台,查看按阶段分组的耗时日志;
  3. 找到占比最高的组件,把通用设置里的「功能加载模式」从「同时」改为「延后」(或直接停用该组件),再次刷新对比。

预期输出(logStats打印,src/core/performance/stats.ts):

components block time: 123.45ms for 12 items 夜间模式 30.21ms 24.47% 自定义顶栏 18.9ms 15.31% ...

如何判断成功:控制台出现上述分组日志即说明注入正常;改完加载模式再刷新,总耗时或该组件耗时下降,就说明调整生效。

异常手册:六个常见现象的排查表

看到什么、为什么、怎么办,按行对照即可。

现象可能原因处置办法
装完脚本页面没有任何变化默认不预装任何组件,只带设置面板等内置组件进设置面板装你需要的功能,装完刷新页面
功能面板不显示、效果时好时坏脚本管理器不兼容(Greasemonkey / AdGuard)、版本过低、套壳浏览器,或尚未登录 B 站换最新版 Chrome/Firefox + Tampermonkey/Violentmonkey,并确认已登录
弹出"脚本试图访问跨域资源"用外部链接安装组件、或将下载任务发送到自己的服务器时的已知提示确认来源后选"始终允许",之后不再重复提示
页面明显变卡配置不达标,或装配组件过多对照最低配置(8GB 内存、1920×1080、10MB/s);开开发者模式定位耗时大户,改延后加载或停用
升级后设置错乱或旧版出问题官方策略:新版本正式发布后不再对旧版提供技术支持升级前在关于面板导出设置;必须留在旧版时参考 doc/rollback.md 回退指南;v1 用户装「v1 设置迁移」组件导入旧设置
ASS 弹幕文件里缺弹幕文档明确 ASS 弹幕下载不含高级弹幕、字幕弹幕预期行为,无需处理

路线建议:三类人各走各的

普通用户

  • 只装高频组件(下载视频、夜间模式等),保持克制,这是长期流畅的前提
  • 把"升级前在关于面板导出设置"变成固定动作
  • 关注 CHANGELOG,新版本发布后及时跟进,因为旧版不再受支持

重度用户

  • 通读 src/core/life-cycle.ts 与 src/core/loading-mode.ts,理解be:start→be:style-loaded→be:components-loaded→be:end四个生命周期事件
  • 用开发者模式日志为每个组件单独调整加载模式
  • 动手改暗色样式前,先读 registry/lib/components/style/dark-mode/README.md 的分片规范与配色表,避免重蹈 2018 年"选择器太宽泛"的老路

想贡献代码的人

  • 克隆 https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved ,在根目录与 registry/ 下各执行一次pnpm install
  • 用pnpm tsx dev-tools/dev-server/index.ts启动开发服务(默认 23333 端口),新组件写在registry/lib/components/<类别>/下,index.ts用defineComponentMetadata导出,index.md写描述
  • 跨组件协作优先用addData/addHook而不是互相引用;提交前跑pnpm run lint-check与pnpm run type

Bilibili-Evolved 把油猴脚本从"一个成品"还原成"一套装配规则":核心层管稳定,组件层承载功能,插件层负责互通,连功能文档和 PR 检查都是生成式工具链的一部分。它真正的价值不下载哪个具体功能,而在于这套"元数据 + 生命周期 + 数据注入"的组合——换个站、换个场景,这套工程化的写法几乎可以原样搬走。

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进