@rsdoctor/docs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/docs/en/_meta.json +17 -0
  2. package/docs/en/blog/_meta.json +12 -0
  3. package/docs/en/blog/release/_meta.json +1 -0
  4. package/docs/en/blog/release/release-note-1.mdx +129 -0
  5. package/docs/en/blog/topic/_meta.json +1 -0
  6. package/docs/en/blog/topic/duplicate-pkg-problem.mdx +141 -0
  7. package/docs/en/blog/topic/loader-optimization.mdx +80 -0
  8. package/docs/en/config/_meta.json +7 -0
  9. package/docs/en/config/options/_meta.json +1 -0
  10. package/docs/en/config/options/options.mdx +135 -0
  11. package/docs/en/config/options/term.mdx +10 -0
  12. package/docs/en/guide/_meta.json +17 -0
  13. package/docs/en/guide/more/_meta.json +1 -0
  14. package/docs/en/guide/more/faq.mdx +104 -0
  15. package/docs/en/guide/more/rules.mdx +5 -0
  16. package/docs/en/guide/start/_meta.json +1 -0
  17. package/docs/en/guide/start/cli.mdx +94 -0
  18. package/docs/en/guide/start/features.mdx +36 -0
  19. package/docs/en/guide/start/intro.mdx +115 -0
  20. package/docs/en/guide/start/quick-start.mdx +210 -0
  21. package/docs/en/guide/usage/_meta.json +13 -0
  22. package/docs/en/guide/usage/bundle-alerts.mdx +47 -0
  23. package/docs/en/guide/usage/bundle-overall.mdx +55 -0
  24. package/docs/en/guide/usage/bundle-size.mdx +122 -0
  25. package/docs/en/guide/usage/compile-alerts.mdx +18 -0
  26. package/docs/en/guide/usage/compile-overall.mdx +115 -0
  27. package/docs/en/guide/usage/loaders-analysis.mdx +72 -0
  28. package/docs/en/guide/usage/loaders-timeline.mdx +68 -0
  29. package/docs/en/guide/usage/module-analysis.mdx +58 -0
  30. package/docs/en/guide/usage/plugins-analysis.mdx +43 -0
  31. package/docs/en/guide/usage/project-overall.mdx +51 -0
  32. package/docs/en/guide/usage/resolver.mdx +29 -0
  33. package/docs/en/index.md +38 -0
  34. package/docs/zh/_meta.json +17 -0
  35. package/docs/zh/blog/_meta.json +12 -0
  36. package/docs/zh/blog/release/_meta.json +1 -0
  37. package/docs/zh/blog/release/release-note-1.mdx +128 -0
  38. package/docs/zh/blog/topic/_meta.json +1 -0
  39. package/docs/zh/blog/topic/duplicate-pkg-problem.mdx +138 -0
  40. package/docs/zh/blog/topic/loader-optimization.mdx +80 -0
  41. package/docs/zh/config/_meta.json +7 -0
  42. package/docs/zh/config/options/_meta.json +1 -0
  43. package/docs/zh/config/options/options.mdx +138 -0
  44. package/docs/zh/config/options/term.mdx +10 -0
  45. package/docs/zh/guide/_meta.json +17 -0
  46. package/docs/zh/guide/more/_meta.json +1 -0
  47. package/docs/zh/guide/more/faq.mdx +102 -0
  48. package/docs/zh/guide/more/rules.mdx +5 -0
  49. package/docs/zh/guide/start/_meta.json +1 -0
  50. package/docs/zh/guide/start/cli.mdx +94 -0
  51. package/docs/zh/guide/start/features.mdx +36 -0
  52. package/docs/zh/guide/start/intro.mdx +116 -0
  53. package/docs/zh/guide/start/quick-start.mdx +209 -0
  54. package/docs/zh/guide/usage/_meta.json +13 -0
  55. package/docs/zh/guide/usage/bundle-alerts.mdx +49 -0
  56. package/docs/zh/guide/usage/bundle-overall.mdx +57 -0
  57. package/docs/zh/guide/usage/bundle-size.mdx +122 -0
  58. package/docs/zh/guide/usage/compile-alerts.mdx +18 -0
  59. package/docs/zh/guide/usage/compile-overall.mdx +115 -0
  60. package/docs/zh/guide/usage/loaders-analysis.mdx +73 -0
  61. package/docs/zh/guide/usage/loaders-timeline.mdx +68 -0
  62. package/docs/zh/guide/usage/module-analysis.mdx +59 -0
  63. package/docs/zh/guide/usage/plugins-analysis.mdx +43 -0
  64. package/docs/zh/guide/usage/project-overall.mdx +51 -0
  65. package/docs/zh/guide/usage/resolver.mdx +29 -0
  66. package/docs/zh/index.md +38 -0
  67. package/docs/zh/shared/features-rspack.md +24 -0
  68. package/docs/zh/shared/features.md +29 -0
  69. package/package.json +44 -0
  70. package/src/components/NextSteps.module.scss +6 -0
  71. package/src/components/NextSteps.tsx +7 -0
  72. package/src/components/Overview.module.scss +61 -0
  73. package/src/components/Overview.tsx +40 -0
  74. package/src/components/RuleIndex.module.scss +57 -0
  75. package/src/components/RuleIndex.tsx +75 -0
  76. package/src/components/Step.module.scss +32 -0
  77. package/src/components/Step.tsx +13 -0
  78. package/src/global.d.ts +4 -0
  79. package/src/utils.ts +9 -0
@@ -0,0 +1,102 @@
1
+ # FAQ
2
+
3
+ ## 如何只使用 Rsdoctor 的某个功能?
4
+
5
+ 当我们**只需要** Rsdoctor 内 [Bundle Size](../usage/bundle-size) 分析产物大小的功能时,我们可以在接入 Rsdoctor 插件时配置对应的 [Features](/config/options/options) 配置项,参考下方代码:
6
+
7
+ ```ts
8
+ import { RsdoctorWebpackPlugin } from '@rsdoctor/webpack-plugin';
9
+
10
+ new RsdoctorWebpackPlugin({
11
+ features: ['bundle'], // 代表只开启 bundle size 的功能分析
12
+ });
13
+ ```
14
+
15
+ ## Loader 耗时数据不准?
16
+
17
+ Rsdoctor 提供的 Loader 耗时时间是**预估耗时**,为什么没法统计到准确耗时?是因为我们知道 Loader 执行可能是**异步**函数也可能是**同步**函数,同时,构建器会**并行执行多个**不冲突的 Loader 函数,其中 **JS 是单线程**的,多个 Loader 函数均可能**抢占当前的任务队列**,同时 Loader 函数内的**异步逻辑没法识别**,导致单个 Loader 函数在执行过程中,**可能横跨**多个其他 Loader 的执行过程,所以会存在如下图所示的三种 case:
18
+
19
+ <img
20
+ src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/compile/loader-cases.jpeg"
21
+ style={{ width: '250px' }}
22
+ />
23
+
24
+ 因此,Rsdoctor 提供的 Loader 耗时是一个**预估**的数据,而我们给出的耗时数据适配了上图中 Case 1 和 Case 2 的情况,对于 Case 3 的解决方案,我们目前还在探索中。
25
+
26
+ ## 使用 `Rsdoctor` 构建时出现了 `out of memory` 问题
27
+
28
+ 如果出现了 `out of memory` 的报错,可以尝试下列两个方法,推荐优先使用第一个:
29
+
30
+ ### 方法一
31
+
32
+ 增大 node 内存上限, 例如:NODE_OPTIONS=--max-old-space-size=8096。
33
+
34
+ ### 方法二
35
+
36
+ 可以在 `features` 数组中添加 `lite` 字段,使用 lite 模式,同时,因为 features 为数组时会覆盖掉默认配置,所以:
37
+
38
+ - 如果需要构建时分析,`features` 数组中添加 `loader` 和 `plugins`,是开启 `loader` 和 `plugins` 的耗时分析。
39
+
40
+ - 如果需要构建产物分析,`features` 数组中添加 `bundle`,是开启构建产物分析。
41
+
42
+ 下面示例是开启了 lite 模式以及构建时和构建产物分析:
43
+
44
+ ```js
45
+ const { RsdoctorWebpackPlugin } = require('@rsdoctor/webpack-plugin');
46
+
47
+ // adding the plugin to your configuration
48
+ module.exports = {
49
+ // ...
50
+ plugins: [
51
+ new RsdoctorWebpackPlugin({
52
+ disableClientServer: false,
53
+ features: ['lite', 'loader', 'plugins', 'bundle'],
54
+ }),
55
+ ].filter(Boolean),
56
+ };
57
+ ```
58
+
59
+ - 原因:因为构建过程中,存储了源码信息,超过了内存,所以开启 `lite` 模式可以缓解。
60
+ - 区别:`lite` 模式和普通模式的区别就是不再存储**源码信息**,只存储**打包后的代码**,同时分析报告上的代码也将**只有打包后的代码**。
61
+
62
+ ## Next.js
63
+
64
+ ### Next.js 项目报告页面问题
65
+
66
+ 在 `next.config.js` 的 [Webpack Config](https://nextjs.org/docs/app/api-reference/next-config-js/webpack) 中初始化 RsdoctorWebpackPlugin 插件。
67
+
68
+ 然而,在 Next.js 中,当开启 Rsdoctor 并通过 build 执行构建后,Rsdoctor 启动的报告服务器会被断开。因此,如果需要再次打开报告,可以使用 **[@rsdoctor/cli](../start/cli.mdx)**,而无需执行构建操作。
69
+
70
+ 例如:Rsdoctor 的构建产物在 `.next/.rsdoctor/manifest.json` 路径,则可通过执行下面命令来打开报告页面:
71
+
72
+ ```bash
73
+ npx @rsdoctor/cli analyze --profile .next/.rsdoctor/manifest.json
74
+
75
+ ```
76
+
77
+ ### Next.js 中不支持对 rules 进行重写的 Loader 分析
78
+
79
+ - Rsdoctor Loader 逻辑:由于 Rsdoctor 会对 Loader Rules 做修改,所以 Rsdoctor 为了兼容对 rules 进行重写的 Loader 逻辑,Rsdoctor 对 Module 进行了 Proxy 包裹。
80
+
81
+ - Next.js 特有逻辑:而 Next.js 中会对 LoaderContext 添加 currentTraceSpan 属性,这个属性的值来自于以 Module 为 key 获取的值。因为 Rsdoctor 对 Module 进行了 Proxy 包裹(简称: ProxyModule),所以以 ProxyModule 为 key 是拿不到任何值的。
82
+
83
+ 基于上面原因,Rsdoctor 在 Next.js 项目中不对 Module 进行 Proxy 包裹逻辑,从而也就不支持对 rules 进行重写的 Loader 分析。如果遇到 Loader 报错,需要配置 **[features](../../config/options/options#features)** 参数来关闭 **Loader** 分析,如下配置即可:
84
+
85
+ ```js title="next.config.js"
86
+ const { RsdoctorWebpackPlugin } = require('@rsdoctor/webpack-plugin');
87
+
88
+ module.exports = {
89
+ // ...
90
+ webpack: (config, { isServer }) => {
91
+ config.plugins.push(
92
+ new RsdoctorWebpackPlugin({
93
+ // 插件选项
94
+ features: ['bundle', 'plugins'],
95
+ }),
96
+ );
97
+ return config;
98
+ },
99
+ };
100
+ ```
101
+
102
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
@@ -0,0 +1,5 @@
1
+ # Rule Index
2
+
3
+ import RuleIndex from '@src/components/RuleIndex';
4
+
5
+ <RuleIndex />
@@ -0,0 +1 @@
1
+ ["intro", "quick-start", "features", "cli"]
@@ -0,0 +1,94 @@
1
+ # CLI 使用教程
2
+
3
+ 我们提供了 `@rsdoctor/cli` 让你可以在本地通过 CLI 程序来使用 Rsdoctor 提供的功能
4
+
5
+ :::tip
6
+ `@rsdoctor/webpack-plugin`、`@rsdoctor/rspack-plugin` 与 `@rsdoctor/cli` 要保持同一个 major 和 minor 版本。
7
+ :::
8
+
9
+ ## 安装 @rsdoctor/cli
10
+
11
+ :::tip
12
+
13
+ - @rsdoctor/cli & @rsdoctor/webpack-plugin & @rsdoctor/rspack-plugin >= 0.1.2。
14
+ - 可以使用非安装方式,使用 `npx @rsdoctor/cli <command> [options]`。
15
+
16
+ :::
17
+
18
+ import { PackageManagerTabs } from '@theme';
19
+
20
+ import { Tab, Tabs } from 'rspress/theme';
21
+
22
+ <PackageManagerTabs command="add @rsdoctor/cli -D" />
23
+
24
+ ## 命令使用
25
+
26
+ ```linux
27
+
28
+ rsdoctor <command> [options]
29
+
30
+ ```
31
+
32
+ `@rsdoctor/cli` 目前提供了以下几个命令对应不同的功能:
33
+
34
+ ### analyze 命令
35
+
36
+ `analyze` 命令主要是用于在**本地**加载 [manifest.json](../../config/options/term.mdx) 并且无需再次构建直接启动 Rsdoctor 的分析报告页面。
37
+
38
+ ```linux
39
+ rsdoctor analyze --profile <manifestFile>
40
+ ```
41
+
42
+ **参数定义**
43
+
44
+ - `manifestFile` 即为 [manifest.json](../../config/options/term.mdx) 的路径(支持本地路径)
45
+
46
+ **使用示例**
47
+
48
+ ```bash
49
+ rsdoctor analyze --profile "./dist/.rsdoctor/manifest.json"
50
+ ```
51
+
52
+ ## Node API
53
+
54
+ 我们在 `@rsdoctor/cli` 中提供了 Node.js API,可以让你在 Node.js 运行时进行调用。
55
+
56
+ **引入模块**
57
+
58
+ <Tabs>
59
+
60
+ <Tab label="cjs">
61
+
62
+ ```js
63
+ const { execute } = require('@rsdoctor/cli');
64
+ ```
65
+
66
+ </Tab>
67
+
68
+ <Tab label="esm">
69
+
70
+ ```js
71
+ import { execute } from '@rsdoctor/cli';
72
+ ```
73
+
74
+ </Tab>
75
+
76
+ </Tabs>
77
+
78
+ **execute()**
79
+
80
+ `execute` 异步函数是 Rsdoctor CLI 的执行函数,通过调用 `execute` 函数就会自动解析 [process.argv](https://nodejs.org/dist/latest-v18.x/docs/api/process.html#processargv),然后调用不同的命令。
81
+
82
+ **execute('analyze', \{...\})**
83
+
84
+ 如果你需要通过 Node.js API 直接执行 [analyze 命令](#analyze-命令),则可以通过如下方式调用:
85
+
86
+ ```ts
87
+ execute('analyze', {
88
+ profile: 'input the manifest.json path or url',
89
+ }).then((sdk) => {
90
+ console.log('execute "anaylze" command success');
91
+ // you can stop the Rsdoctor's dev-server by calling the sdk'api below:
92
+ // sdk.dispose();
93
+ });
94
+ ```
@@ -0,0 +1,36 @@
1
+ # 功能导航
2
+
3
+ 在这里,你可以了解到 Rsdoctor 支持的主要功能。
4
+
5
+ ## 构建概览
6
+
7
+ | 功能 | 描述 | 相关链接 |
8
+ | -------- | ------------------------------ | ------------------------------------ |
9
+ | 项目概览 | 查看当前项目配置、版本等信息 | [项目概览](../usage/project-overall) |
10
+ | 产物概览 | 查看当前项目构建产物的信息 | [产物概览](../usage/bundle-overall) |
11
+ | 编译概览 | 查看当前项目编译过程的数据信息 | [编译概览](../usage/compile-overall) |
12
+ | 产物预警 | 基于构建产物数据做检测的能力 | [产物预警](../usage/bundle-alerts) |
13
+ | 编译预警 | 基于编译数据做检测的能力 | [编译预警](../usage/compile-overall) |
14
+
15
+ ## 编译分析
16
+
17
+ | 功能 | 描述 | 相关链接 |
18
+ | --------------------- | -------------------------------------------------------- | --------------------------------------------------------------- |
19
+ | 编译概览 | 查看当前项目编译过程的数据信息 | [编译概览](../usage/compile-overall) |
20
+ | 编译预警 | 基于编译数据做检测的能力 | [编译预警](../usage/compile-alerts) |
21
+ | Loader 编译行为分析 | 以目录与文件维度的 Loader 分析数据,展示单个文件编译行为 | [Loaders 分析](../usage/loaders-analysis) |
22
+ | Loaders 耗时分析 | 当前项目中所有 Loader 的执行时序图 | [Loaders 时序图](../usage/loaders-timeline) |
23
+ | Plugins 分析 | 项目所使用插件的数据分析 | [Plugins 分析](../usage/plugins-analysis) |
24
+ | Resolver 分析 | Resolver 解析能力分析数据 | [Resolver 分析](../usage/resolver) |
25
+ | Loader 耗时分析及优化 | 该文档介绍如何使用 Rsdoctor 进行构建耗时分析并优化 | [ Loader 耗时分析及优化 ](../../blog/topic/loader-optimization) |
26
+
27
+ ## 构建产物分析
28
+
29
+ | 功能 | 描述 | 相关链接 |
30
+ | ----------- | ----------------------------------------------------------------------------- | ---------------------------------------------------- |
31
+ | 产物概览 | 查看当前项目构建产物的信息 | [产物概览](../usage/bundle-overall) |
32
+ | 产物预警 | 基于构建产物数据做检测的能力 | [产物预警](../usage/bundle-alerts) |
33
+ | 产物分析 | 产物中 assets、chunks、modules 关系分析,以及每个 module 打包代码及大小分析等 | [产物分析](../usage/bundle-size) |
34
+ | 模块分析 | Modules 依赖关系分析 | [Modules 依赖链分析](../usage/module-analysis) |
35
+ | 重复包优化 | 检查项目使用的依赖包的重复情况 | [重复包优化](../../blog/topic/duplicate-pkg-problem) |
36
+ | Bundle Diff | 两份产物对比分析 | 计划支持 |
@@ -0,0 +1,116 @@
1
+ # 介绍
2
+
3
+ ## 💡 什么是 Rsdoctor?
4
+
5
+ - Rsdoctor 是一个面向构建过程与构建产物提供诊断和分析的一站式工具。
6
+ - Rsdoctor 是一个支持 Webpack 及 Rspack 构建分析工具。
7
+ - Rsdoctor 是一个可以展示编译耗时及编译行为细节的分析工具。
8
+ - Rsdoctor 是一个提供 Bundle Diff 等防劣化能力的工具。
9
+
10
+ ## 🔥 特性
11
+
12
+ - **编译可视化**:Rsdoctor 将编译行为及耗时进行可视化展示,方便开发同学查看构建问题。
13
+ - **多种分析能力**:支持构建产物、构建时分析能力:
14
+ - 构建产物支持资源列表及模块依赖等。
15
+ - 构建时分析支持 Loader、Plugin、Resolver 构建过程分析。
16
+ - 支持 Rspack 的 builtin:swc-loader 分析。
17
+ - 构建规则支持重复包检测及 ES Version Check 检查等。
18
+ - **支持自定义规则**:除了内置构建扫描规则外,还支持用户根据 Rsdoctor 的构建数据添加自定义构建扫描规则。
19
+ - **框架无关**:支持所有基于 Webpack 或 Rspack 构建的项目。
20
+
21
+ ## 🛠️ 功能介绍
22
+
23
+ ### ⭐️ 概览
24
+
25
+ - 概览页(即首页)能够知道**项目配置、诊断信息、编译信息、产物情况**。
26
+
27
+ ![Overall](https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/overall.jpg)
28
+
29
+ - 除了有项目概览之外,我们还提供了诊断模块,分别是编译诊断、重复包诊断等。如果你的编译、产物命中了我们定义的诊断规则,就会在工具首页出现对应的警示模块, **其中重复包可以查看到详细的引用路径**:
30
+
31
+ ![Overall-Alerts](https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/overall-alerts.jpg)
32
+
33
+ ### ⭐️ 编译分析
34
+
35
+ 面向 **Loaders、Plugins、Module Resolve** 提供了对应的数据与分析功能,来帮助你分析编译过程上的问题。
36
+
37
+ #### Loader 分析
38
+
39
+ - 该模块主要提供了 **Rspack 或 Webpack 的 Loaders** 内的输入输出、预估耗时、参数等数据分析的功能。
40
+
41
+ <div style={{ display: 'flex' }}>
42
+ <img
43
+ src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/compile/loader-timeline-overall.png"
44
+ width="55%"
45
+ style={{ margin: 'auto' }}
46
+ />
47
+ <img
48
+ src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/compile/loader-anlaysis-all.png"
49
+ width="45%"
50
+ style={{ margin: 'auto' }}
51
+ />
52
+ </div>
53
+
54
+ #### Plugin 分析
55
+
56
+ - 该模块主要拦截并收集了 Plugins 的调用次数、预估耗时等数据信息。
57
+
58
+ <p>
59
+ <img
60
+ alt="bundle"
61
+ src={
62
+ 'https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/compile-plugin.jpg'
63
+ }
64
+ width="600px"
65
+ style={{ margin: 'auto' }}
66
+ />
67
+ </p>
68
+
69
+ #### Resolve 分析
70
+
71
+ - 该模块主要提供了项目内部单个文件中模块解析的路径数据以及预估耗时。Rspack 暂时未支持该模块。
72
+
73
+ <p>
74
+ <img
75
+ alt="bundle"
76
+ src={
77
+ 'https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/resolver.jpeg'
78
+ }
79
+ width="700px"
80
+ style={{ margin: 'auto' }}
81
+ />
82
+ </p>
83
+
84
+ ### ⭐️ 产物分析
85
+
86
+ - 我们在「Bundle Size」模块中,可以看到当前项目的产物数据信息概览,以及分析重复包引入的体积与原因。
87
+
88
+ - 此外,我们还可以通过「Bundle Analysis」 模块来进一步分析当前产物中产物与模块关系,体积数据等信息以及模块引入的原因。
89
+
90
+ <p>
91
+ <img
92
+ alt="bundle"
93
+ src={
94
+ 'https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/bundle-size.jpg'
95
+ }
96
+ width="700px"
97
+ style={{ margin: 'auto' }}
98
+ />
99
+ </p>
100
+
101
+ ### ⭐️ Bundle Diff
102
+
103
+ ::: tip
104
+ 功能支持中...
105
+ :::
106
+
107
+ 使用 Rsdoctor 提供的 Bundle Diff 功能,可以看到产物内的资源体积、重复包、Packages 等数据的变化以及每个资源中的模块文件的大小及代码的变化。
108
+
109
+ | ![bundle-diff-1](https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/bundle-diff-2.png) | ![bundle-diff-2](https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/start/bundle-diff-1.png) |
110
+ | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
111
+
112
+ ## 🧑‍💻 社区
113
+
114
+ 欢迎加入我们的 [Discord](https://discord.gg/wrBPBT6rkM) 交流频道!Rsdoctor 团队和用户都在那里活跃,并且我们一直期待着各种贡献。
115
+
116
+ 你也可以加入 [飞书群](https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=3c3vca77-bfc0-4ef5-b62b-9c5c9c92f1b4) 与大家一起交流。
@@ -0,0 +1,209 @@
1
+ # 快速开始
2
+
3
+ 本文档将介绍如何接入 Rsdoctor 能力。
4
+
5
+ ## 第一步:安装依赖
6
+
7
+ import { PackageManagerTabs } from '@theme';
8
+
9
+ ### Rspack 项目
10
+
11
+ 基于 Rspack 或 Rsbuild 的项目,安装以下依赖:
12
+
13
+ <PackageManagerTabs command="add @rsdoctor/rspack-plugin -D" />
14
+
15
+ ### Webpack 项目
16
+
17
+ :::tip
18
+ 不支持 Webpack 4 项目。
19
+ :::
20
+
21
+ 基于 Webpack 的项目,安装以下依赖:
22
+
23
+ <PackageManagerTabs command="add @rsdoctor/webpack-plugin -D" />
24
+
25
+ ---
26
+
27
+ ## 第二步:注册插件
28
+
29
+ 依赖安装完成后,你需要在项目中接入 Rsdoctor 插件,下面是一些常见工具和框架的示例:
30
+
31
+ ### Rspack 项目
32
+
33
+ 在 `rspack.config.js` 的 [plugins](https://www.rspack.dev/config/plugins.html#plugins) 中初始化 RsdoctorRspackPlugin 插件,参考:
34
+
35
+ ```js title="rspack.config.js"
36
+ const { RsdoctorRspackPlugin } = require('@rsdoctor/rspack-plugin');
37
+
38
+ module.exports = {
39
+ // ...
40
+ plugins: [
41
+ // 仅在 RSDOCTOR 为 true 时注册插件,因为插件会增加构建耗时
42
+ process.env.RSDOCTOR &&
43
+ new RsdoctorRspackPlugin({
44
+ // 插件选项
45
+ }),
46
+ ].filter(Boolean),
47
+ };
48
+ ```
49
+
50
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
51
+
52
+ ### Rsbuild 项目
53
+
54
+ 在 `rsbuild.config.ts` 的 [tools.rspack](https://rsbuild.dev/config/tools/rspack) 中初始化 RsdoctorWebpackPlugin 插件,参考:
55
+
56
+ ```js title="rsbuild.config.ts"
57
+ import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin';
58
+
59
+ export default {
60
+ // ...
61
+ tools: {
62
+ rspack(config, { appendPlugins }) {
63
+ // 仅在 RSDOCTOR 为 true 时注册插件,因为插件会增加构建耗时
64
+ if (process.env.RSDOCTOR) {
65
+ appendPlugins(
66
+ new RsdoctorRspackPlugin({
67
+ // 插件选项
68
+ }),
69
+ );
70
+ }
71
+ },
72
+ },
73
+ };
74
+ ```
75
+
76
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
77
+
78
+ ### Webpack 项目
79
+
80
+ 在 `webpack.config.js` 的 [plugins](https://webpack.js.org/configuration/plugins/#plugins) 中初始化 RsdoctorWebpackPlugin 插件,参考:
81
+
82
+ ```js title="webpack.config.js"
83
+ const { RsdoctorWebpackPlugin } = require('@rsdoctor/webpack-plugin');
84
+
85
+ module.exports = {
86
+ // ...
87
+ plugins: [
88
+ // 仅在 RSDOCTOR 为 true 时注册插件,因为插件会增加构建耗时
89
+ process.env.RSDOCTOR &&
90
+ new RsdoctorWebpackPlugin({
91
+ // 插件选项
92
+ }),
93
+ ].filter(Boolean),
94
+ };
95
+ ```
96
+
97
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
98
+
99
+ ### Modern.js 项目
100
+
101
+ 在 `modern.config.ts` 的 [tools.bundlerChain](https://modernjs.dev/configure/app/tools/rspack) 中初始化插件,参考:
102
+
103
+ ```ts title="modern.config.ts"
104
+ import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin';
105
+
106
+ export default {
107
+ // ...
108
+ tools: {
109
+ rspack(config, { appendPlugins }) {
110
+ // 仅在 RSDOCTOR 为 true 时注册插件,因为插件会增加构建耗时
111
+ if (process.env.RSDOCTOR) {
112
+ appendPlugins(
113
+ new RsdoctorRspackPlugin({
114
+ // 插件选项
115
+ }),
116
+ );
117
+ }
118
+ },
119
+ },
120
+ };
121
+ ```
122
+
123
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
124
+
125
+ :::tip
126
+ 对于使用 Modern.js Webpack 模式的项目,请使用 [tools.webpack](https://modernjs.dev/configure/app/tools/webpack) 注册 `RsdoctorWebpackPlugin` 插件。
127
+ :::
128
+
129
+ ### Next.js 项目
130
+
131
+ 在 `next.config.js` 的 [Webpack Config](https://nextjs.org/docs/app/api-reference/next-config-js/webpack) 中初始化 RsdoctorWebpackPlugin 插件。
132
+
133
+ ```ts title="next.config.mjs"
134
+ import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin';
135
+
136
+ export default {
137
+ // ...
138
+ webpack: (config, { isServer }) => {
139
+ config.plugins.push(
140
+ new RsdoctorWebpackPlugin({
141
+ // 插件选项
142
+ }),
143
+ );
144
+ return config;
145
+ },
146
+ };
147
+ ```
148
+
149
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
150
+
151
+ #### 📢 Next.js 项目使用注意
152
+
153
+ 1. Next.js 项目报告页面问题
154
+
155
+ 详情查看:[FAQ](../more/faq#nextjs)
156
+
157
+ 2. Next.js 中不支持对 rules 进行重写的 Loader 分析
158
+
159
+ 详情查看:[FAQ](../more/faq#nextjs)
160
+
161
+ ### Vue 项目
162
+
163
+ 在配置文件中初始化 `@rsdoctor/webpack-plugin` 或 `@rsdoctor/rspack-plugin` 插件,以下是使用 rsbuild 项目作为示例:
164
+
165
+ ```ts title="rsbuild.config.ts"
166
+ import { defineConfig } from '@rsbuild/core';
167
+ import { pluginVue } from '@rsbuild/plugin-vue';
168
+ import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin';
169
+
170
+ export default defineConfig({
171
+ plugins: [pluginVue()],
172
+ performance: {
173
+ buildCache: false,
174
+ },
175
+ tools: {
176
+ bundlerChain: (chain, { CHAIN_ID }) => {
177
+ chain.plugin('Rsdoctor').use(RsdoctorRspackPlugin, [
178
+ {
179
+ // 插件选项
180
+ },
181
+ ]);
182
+ },
183
+ },
184
+ });
185
+ ```
186
+
187
+ - **Options:** 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
188
+
189
+ #### 📢 Vue 项目使用注意
190
+
191
+ 由于目前不支持对 `vue-loader` 进行分析,对于 Vue 项目,默认情况下禁用了 loader 分析。但是,仍然可以进行插件和构建产物的分析。
192
+
193
+ ---
194
+
195
+ ## 第三步:执行构建
196
+
197
+ 现在你可以在项目内执行 **build** 命令,在完成构建后,Rsdoctor 会自动打开本次构建的分析页面。
198
+
199
+ ```bash
200
+ # 开启 Rsdoctor
201
+ RSDOCTOR=true npm run build
202
+
203
+ # 未开启 Rsdoctor
204
+ npm run build
205
+ ```
206
+
207
+ :::tip
208
+ Rsdoctor 插件提供了一些配置项,请参考 [Options](../../config/options/options)。
209
+ :::
@@ -0,0 +1,13 @@
1
+ [
2
+ "project-overall",
3
+ "bundle-overall",
4
+ "compile-overall",
5
+ "compile-alerts",
6
+ "bundle-alerts",
7
+ "loaders-timeline",
8
+ "loaders-analysis",
9
+ "plugins-analysis",
10
+ "bundle-size",
11
+ "module-analysis",
12
+ "resolver"
13
+ ]
@@ -0,0 +1,49 @@
1
+ # 产物预警
2
+
3
+ ## 功能介绍
4
+
5
+ ### 重复第三方包
6
+
7
+ - `Duplicate Packages` 卡片上展示了项目重复第三方包数目。点击图片可以查看重复第三方包的具体详情。注:这里的第三方都是被打包的第三方包。
8
+
9
+ <div style={{ display: 'flex' }}>
10
+ <img
11
+ src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alters-1.png"
12
+ height="200px"
13
+ width="360px"
14
+ style={{ margin: 'auto' }}
15
+ />
16
+ <img
17
+ src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alters-2.png"
18
+ height="300px"
19
+ width="440px"
20
+ style={{ margin: 'auto' }}
21
+ />
22
+ </div>
23
+
24
+ - 重复包预警卡片
25
+
26
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alerts.png" />
27
+
28
+ - 点击图标展开重复包详情,可以看到:重复包的包名、版本、大小、引用文件。
29
+
30
+ - 点击最右侧 **「Show Relations」** 可以查看具体这个第三方的引用链路和对应的引用文件代码位置。
31
+
32
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alters-relations.png" />
33
+
34
+ - 点击最右侧 **「!(叹号)」** 图标,可以查看重复第三方包的规则的具体解释。
35
+
36
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alters-rule.png" />
37
+
38
+ ### 重复包优化问题
39
+
40
+ 请查看[重复包优化方案](../../blog/topic/duplicate-pkg-problem)。
41
+
42
+ ### ECMA 版本检查
43
+
44
+ 产物预警中会对产物进行 ECMA 版本做检查,如下图:
45
+
46
+ {' '}
47
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/lognuvj/rsdoctor/docs/usage/bundle/bundle-alerts-ecma.png" />
48
+
49
+ 点击 「**More**」可以查看对应规则解释。