Skip to content

Commit 3be5e0d

Browse files
committed
docs: ✏️ 更新 taro 12 篇文章
1 parent 69e2a3a commit 3be5e0d

File tree

1 file changed

+81
-1
lines changed

1 file changed

+81
-1
lines changed

docs/taro/mini-plugin-3/README.md

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,91 @@ theme: smartblue
4343
等等
4444
```
4545

46-
##
46+
```ts
47+
// packages/taro-webpack5-runner/src/plugins/MiniPlugin.ts
48+
compilation.hooks.processAssets.tapAsync(
49+
{
50+
name: PLUGIN_NAME,
51+
stage: PROCESS_ASSETS_STAGE_ADDITIONAL
52+
},
53+
this.tryAsync<any>(async () => {
54+
// 如果是子编译器,证明是编译独立分包,进行单独的处理
55+
if ((compilation as any).__tag === CHILD_COMPILER_TAG) {
56+
await this.generateIndependentMiniFiles(compilation, compiler)
57+
} else {
58+
await this.generateMiniFiles(compilation, compiler)
59+
}
60+
})
61+
)
62+
```
63+
64+
```ts
65+
// packages/taro-webpack5-runner/src/plugins/MiniPlugin.ts
66+
/** 生成小程序相关文件 */
67+
async generateMiniFiles (compilation: Compilation, compiler: Compiler) {
68+
// compilation.assets[xxx] = xxx;
69+
}
70+
```
71+
72+
这个函数特别长,简单来说就是以下这几项
73+
74+
- 生成 XS 文件 generateXSFile
75+
- 生成配置文件 generateConfigFile
76+
- 生成模板文件 generateTemplateFile
77+
78+
最终通过 `compilation.assets[xxx] = xxx;` 赋值语句生成文件。
79+
80+
我们来看下具体实现。
81+
82+
## generateMiniFiles 生成小程序文件
83+
84+
是 TaroMiniPlugin 类中用于生成小程序相关产物(如模板、配置、样式、资源等)的核心方法。它的主要职责是根据收集到的页面、组件、配置等信息,生成最终小程序所需的各种文件,并写入到 webpack 的 compilation.assets 中。其主要流程如下:
85+
86+
```ts
87+
// packages/taro-webpack5-runner/src/plugins/MiniPlugin.ts
88+
89+
```
4790

91+
处理样式文件名重复问题
92+
首先遍历所有产物,如果发现样式文件名重复(如 .wxss.wxss),则去重,保证产物中只有一个正确的样式文件名。
93+
94+
自定义配置处理
95+
如果配置中定义了 modifyMiniConfigs 钩子,则调用该钩子允许用户自定义修改所有页面、组件的配置内容。
96+
97+
生成 app 配置文件
98+
在非 blended 模式且不是插件构建时,生成主包的 app 配置文件(如 app.json),内容来自 this.filesConfig。
99+
100+
生成基础组件模板和配置
101+
如果当前模板不支持递归(如微信、QQ 小程序),则生成基础组件(comp)和自定义包装器(custom-wrapper)的模板和配置文件。
102+
103+
生成全局模板和自定义包装器模板
104+
生成全局的 base 模板和 custom-wrapper 模板(如 base.wxml、custom-wrapper.wxml),并根据配置决定是否压缩 XML。
105+
106+
生成全局 XS 脚本
107+
如果平台支持 XS 脚本,则生成 utils 脚本文件。
108+
109+
生成所有组件的配置和模板
110+
遍历所有组件,为每个组件生成配置文件和模板文件(非原生组件才生成模板)。
111+
112+
生成所有页面的配置和模板
113+
遍历所有页面,为每个页面生成配置文件和模板文件(非原生页面才生成模板),并处理分包页面的过滤。
114+
115+
生成 tabbar 图标资源
116+
调用 generateTabBarFiles 方法,将 tabbar 所需的图片资源写入产物。
117+
118+
注入公共样式
119+
调用 injectCommonStyles 方法,将公共样式自动引入到 app 和各页面样式文件中。
120+
121+
生成暗黑模式主题文件
122+
如果配置了暗黑模式主题,则输出对应的主题文件。
123+
124+
插件模式下生成 plugin.json
125+
如果是插件构建,自动生成并写入 plugin.json 文件。
48126

49127
## 总结
50128

129+
`generateMiniFiles` 负责将 Taro 编译期收集到的所有页面、组件、配置、资源等,最终生成小程序平台所需的所有产物文件,并写入 webpack 的产物集合。它是 Taro 小程序端产物生成的关键环节,确保了最终产物的完整性和平台兼容性。
130+
51131
启发:Taro 是非常知名的跨端框架,我们在使用它,享受它带来便利的同时,有余力也可以多为其做出一些贡献。比如帮忙解答一些 issue 或者提 pr 修改 bug 等。
52132
在这个过程,我们会不断学习,促使我们去解决问题,带来的好处则是不断拓展知识深度和知识广度。
53133
有些时候还是需要深入学习源码,理解源码才能更好的针对项目做相应的优化。

0 commit comments

Comments
 (0)