1. 模型概述:不止是分析,更是构建过程的“可视化显微镜”
1.1 能力评估:不仅能看,还能查,甚至能自定义规矩
Rsdoctor 并非一个简单的数据展示工具,它更像一个一站式构建分析与诊断平台。它主要面向使用 Rspack 或 Webpack 的项目,核心能力可以概括为“看、诊、定规矩” 。
-
核心能力清单:
-
编译可视化:将 Loader、Plugin、Resolver 的执行过程和时间消耗,以直观的火焰图或列表形式呈现。你可以一眼看到到底是哪个 Loader(比如
babel-loader或 Rspack 内置的swc-loader)在拖慢整体速度 。 -
产物分析:展示最终的打包资源(Assets)、模块依赖关系图。轻松发现重复模块、不合理的模块引用以及循环依赖 。
-
规则扫描(代码质量门禁):内置了如重复包检测、ES 版本检查等实用规则,帮助维持工程健康度 。
-
包分析:专门分析项目中的 NPM 包,看看哪个“巨无霸”包占用了过多体积 。
-
-
接口与参数:
Rsdoctor 通过插件 (@rsdoctor/rspack-plugin或@rsdoctor/webpack-plugin) 提供能力。其主要配置参数虽然简洁,但扩展性极强:-
核心插件参数:支持配置
linter等级(level: 'Error' | 'Warn')等基础选项 。 -
扩展接口(杀手锏):通过
extends字段,允许开发者调用@rsdoctor/core的defineRule函数,编写自定义的构建规则。这意味着你不仅能使用官方规则,还能根据业务场景(比如限制某个关键资产的大小、检测特定第三方库的引入)定制专属的“规则大棒” 。
-
1.2 技术特点介绍
-
生态专属:为 Rspack 生态量身打造,同时对 Webpack 也有良好支持,是 ByteDance 前端工程化生态中的重要一环 。
-
双模式支持:既支持在构建时实时启动分析服务,也支持通过 CLI 对已构建的
manifest.json数据进行离线分析(analyze命令)和双版本对比(bundle-diff命令) 。 -
智能化与透明化:旨在通过可视化手段,将复杂的构建流程变得“透明”,让性能优化从“猜”变成“看” 。
1.3 应用场景
-
性能调优:项目构建速度变慢,想知道时间花在哪了?开启 Rsdoctor,精准定位耗时 Plugin 或 Loader。
-
代码质量和工程治理:定期扫描项目中的重复依赖、低版本 ES 代码,或者通过自定义规则防止团队引入不合规的包。
-
CI/CD 对比:使用
bundle-diff命令,对比两个版本(如 main 分支和 feature 分支)的构建产物差异,防止性能退化 。 -
库与组件开发:在使用 Rslib 构建组件库时,分析库的打包构成,确保产物纯净 。
2. 安装与部署方式(保姆级教程)
Rsdoctor 的安装非常灵活,但不同操作系统在设置环境变量时有细微差别。这里我们以最常见的 Rspack 项目为例进行演示。
2.1 核心安装步骤(通用,所有系统)
无论你用的是 Windows、macOS 还是 Linux,第一步都是一样的。
-
安装插件包:
在你的项目根目录下,打开终端,安装对应的插件。# 如果你用的是 Rspack npm add @rsdoctor/rspack-plugin -D # 或者,如果你用的是 Webpack npm add @rsdoctor/webpack-plugin -D
-
注册插件到配置文件:
修改你的rspack.config.js或webpack.config.js,引入插件并包裹在环境变量判断中。这一步至关重要,千万不要在生产环境开启 Rsdoctor 。// rspack.config.js const { RsdoctorRspackPlugin } = require('@rsdoctor/rspack-plugin'); module.exports = { // ... 其他配置 plugins: [ // 只有当我们设置了环境变量 RSDOCTOR=true 时,才启用该插件 process.env.RSDOCTOR === 'true' && new RsdoctorRspackPlugin({ // 可选:配置插件选项 // linter: { level: 'Error' } }), ].filter(Boolean), // 过滤掉 false 值 };
2.2 系统差异化配置与启动
这里是最容易出坑的地方,主要因为 Windows 的命令行处理环境变量的方式和 Linux/macOS 不同。
🖥️ macOS & Linux 用户
这两个系统原生支持在命令前直接设置环境变量。
在你的 package.json 的 scripts 中添加以下命令:
{ "scripts": { "build": "rspack build", // 亮点:一键开启诊断模式 "build:analyze": "RSDOCTOR=true rspack build", "dev:analyze": "RSDOCTOR=true rspack serve" } }
之后运行:
npm run build:analyze
构建完成后,浏览器会自动弹出分析面板。
🪟 Windows 用户(CMD 或 PowerShell)
Windows 标准命令行不支持 RSDOCTOR=true rspack build 这种语法。直接运行会报错。这里有两种完美解决方案:
-
方案一:使用
cross-env工具(推荐,最通用)
cross-env是一个跨平台设置环境变量的库。-
安装:
npm add cross-env -D
-
修改
package.json:{ "scripts": { "build": "rspack build", // 使用 cross-env 包裹命令,完美兼容 Windows "build:analyze": "cross-env RSDOCTOR=true rspack build", "dev:analyze": "cross-env RSDOCTOR=true rspack serve" } }
然后像平常一样
npm run build:analyze即可 。 -
-
方案二:使用 PowerShell 语法
如果你坚持在命令行直接输入,PowerShell 的语法是:# PowerShell 专属 $env:RSDOCTOR="true"; rspack build
2.3 安装常见问题修复
-
问题1:提示
Cannot find module '@rsdoctor/rspack-plugin'-
修复:确保你在安装时加了
-D,并且安装完成后没有删除node_modules。尝试重新运行安装命令。
-
-
问题2:浏览器没有自动打开分析页面
-
修复:检查终端输出是否有报错。确认插件注册成功且构建过程没有崩溃。有时浏览器弹窗会被拦截,可以手动访问控制台输出的本地地址(通常是
http://127.0.0.1:3000或类似端口)。
-
-
问题3:构建速度在开启后明显变慢
-
修复:这是正常现象!Rsdoctor 需要收集大量数据。切记只能在本地分析和 CI 对比时开启,永远不要在生产环境构建命令中包含
RSDOCTOR=true。
-
3. 配套客户端
Rsdoctor 的客户端实际上就是它自带启动的一个本地 Web 应用,无需额外付费。
-
客户端名称:Rsdoctor Report Page(无特定名称,就是其自带的 Web UI)。
-
是否付费:完全免费。
-
客户端配置方式:
-
当你执行
RSDOCTOR=true rspack build后,构建完成瞬间,Rsdoctor 插件会自动启动一个本地服务,并弹出浏览器窗口。 -
这个 Web UI 是零配置的,所有的分析数据(如 Loader 耗时、模块依赖、规则扫描结果)都直观地展示在页面上。你可以通过界面上的选项卡进行切换查看。
-
CLI 方式:你也可以通过
@rsdoctor/cli命令,加载已有的manifest.json文件来启动这个客户端界面,进行历史数据分析或对比 。
npx @rsdoctor/cli analyze --profile "./dist/.rsdoctor/manifest.json"
-
-
下载地址:无需单独下载客户端。它随插件
@rsdoctor/rspack-plugin一起安装,运行时会自动在浏览器中呈现。
4. 案例讲解:一场“构建性能优化”的实战演习
假设我们现在接手了一个老项目,发现执行 npm run build 的时间长达 2分钟,严重影响发版效率。我们决定用 Rsdoctor 来“破案”。
案例场景
-
项目:基于 Webpack 5 的 React 企业后台项目。
-
症状:构建缓慢,尤其在 CI 环境上经常超时。
-
目标:找出构建耗时最长的部分,并优化到 1 分钟以内。
破案步骤与可执行代码
-
布署“监控探头” (安装与配置)
首先,安装 Webpack 版本的插件:npm add @rsdoctor/webpack-plugin -D
修改
webpack.config.js:// webpack.config.js const { RsdoctorWebpackPlugin } = require('@rsdoctor/webpack-plugin'); module.exports = { // ... 其他配置 plugins: [ // 关键:只在分析时开启 process.env.RSDOCTOR === 'true' && new RsdoctorWebpackPlugin() ].filter(Boolean) };
在
package.json中添加分析命令:{ "scripts": { "build": "webpack --mode production", "build:report": "cross-env RSDOCTOR=true webpack --mode production" } }
-
现场取证 (运行分析)
在终端执行:npm run build:report耐心等待构建完成(虽然还是慢,但这次是为了知道为什么慢)。构建结束后,浏览器自动打开了 Rsdoctor 报告页面。
-
数据分析与“破案”
-
打开【构建耗时】面板:我们看到一个巨大的火焰图。
-
发现元凶:图中最宽、最长的两条“柱子”分别是
ts-loader和sass-loader。点击查看详情,发现仅ts-loader就占用了 50秒,且它处理了好多node_modules里的第三方库。 -
查看【规则扫描】:Rsdoctor 的重复包检测功能提示,项目中存在两个不同版本的
lodash,这无疑增加了构建时解析和最终产物体积。
-
-
实施抓捕与优化 (解决方案)
-
针对 Loader 慢:意识到问题在于 Loader 不必要地编译了第三方库。我们在
webpack.config.js中调整配置,为ts-loader明确设置exclude: /node_modules/。 -
针对重复包:在
package.json中使用resolutions(yarn) 或overrides(npm) 统一lodash的版本,或者使用webpack的alias指向同一个版本。
-
-
结案 (验证成果)
再次运行npm run build:report。这次,Rsdoctor 报告上的耗时面板显示,构建总时间已经降到了 45秒!Loader 耗时大幅缩短,重复包警告也消失了。
通过这个案例可以看到,Rsdoctor 就像一份精准的“验尸报告”,把原本模糊的“构建慢”问题,转化为了一个个具体的、可执行的优化项。
5. 使用成本与商业价值
-
使用成本 (近乎为零)
-
学习成本:低。如果你熟悉 Webpack/Rspack 配置,安装插件只需几分钟。其 UI 界面设计直观,无需学习即可上手。
-
接入成本:极低。无侵入式设计,通过环境变量控制,不影响现有构建逻辑。
-
资源成本:仅在本地或 CI 分析时增加构建耗时(因为要采集数据),但相比它帮你节省的优化时间,这点开销完全值得。
-
-
商业价值 (降本增效)
-
提升开发效率:对于企业而言,开发者的时间就是金钱。将构建时间从 2分钟优化到 45秒,假设一个团队每天构建 20次,每天就能为每位开发者节省 25分钟 的等待时间。积少成多,极大提升研发幸福感。
-
保障代码质量:通过自定义规则,可以在 CI 阶段自动拦截“坏味道”代码(如引入了一个巨大的测试库到生产环境),避免技术债务累积,降低后期的维护成本。
-
降低服务器成本:通过分析重复依赖和不合理的模块引用,精简打包体积,可以间接提升网站首屏加载速度,降低用户流失,同时也降低了带宽和服务器存储成本。
-
总结:
Rsdoctor 是一款诚意满满、功力深厚的开发者工具。它不仅是 Rspack 生态的亮眼名片,更是所有深受构建性能困扰的开发团队的“救命稻草”。如果你是前端基建负责人或对构建效率有极致追求的开发者,Rsdoctor 值得立刻纳入你的工具箱。

关注 “悠AI” 更多干货技巧行业动态