weapp-tailwindcss 4.3.2 → 4.4.0-alpha.0

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 (55) hide show
  1. package/dist/chunk-2F7HOQQY.mjs +8 -0
  2. package/dist/chunk-2NRTWL47.js +43 -0
  3. package/dist/{chunk-YNMM5ZP5.mjs → chunk-3MSGCIVH.mjs} +128 -138
  4. package/dist/chunk-6GP37C26.js +8 -0
  5. package/dist/{chunk-GRWK73SM.js → chunk-AEJDBNAX.js} +567 -309
  6. package/dist/{chunk-IDYXPWF6.mjs → chunk-AXYGCCZW.mjs} +51 -63
  7. package/dist/chunk-E2LRXNZ3.js +122 -0
  8. package/dist/{chunk-BXPTS6UP.mjs → chunk-FBGUUXQV.mjs} +1 -1
  9. package/dist/{chunk-72PXDJ7I.js → chunk-FOSGDQZ7.js} +34 -43
  10. package/dist/chunk-H4JTYYOI.mjs +43 -0
  11. package/dist/{chunk-3YIQPUK7.mjs → chunk-IHKVNALD.mjs} +29 -38
  12. package/dist/chunk-KAKRCCPX.mjs +122 -0
  13. package/dist/{chunk-AMSF25MI.js → chunk-NZ7VALIM.js} +130 -140
  14. package/dist/{chunk-YSVQIZ4W.js → chunk-PPTSD6TQ.js} +51 -63
  15. package/dist/{chunk-K6IPKJSY.js → chunk-RBRSMHFS.js} +1 -1
  16. package/dist/chunk-UW3WHSZ5.js +39 -0
  17. package/dist/{chunk-DGVVFKNF.mjs → chunk-WCIVXE2D.mjs} +566 -308
  18. package/dist/chunk-ZNKIYZRQ.mjs +39 -0
  19. package/dist/cli.js +5 -8
  20. package/dist/cli.mjs +4 -7
  21. package/dist/core.js +5 -5
  22. package/dist/core.mjs +4 -4
  23. package/dist/css-macro/postcss.js +1 -1
  24. package/dist/css-macro/postcss.mjs +1 -1
  25. package/dist/css-macro.js +3 -3
  26. package/dist/css-macro.mjs +2 -2
  27. package/dist/defaults.js +4 -4
  28. package/dist/defaults.mjs +3 -3
  29. package/dist/escape.js +1 -1
  30. package/dist/escape.mjs +1 -1
  31. package/dist/gulp.js +7 -7
  32. package/dist/gulp.mjs +6 -6
  33. package/dist/index.js +10 -9
  34. package/dist/index.mjs +9 -8
  35. package/dist/postcss-html-transform.js +1 -1
  36. package/dist/postcss-html-transform.mjs +1 -1
  37. package/dist/presets.js +3 -3
  38. package/dist/presets.mjs +2 -2
  39. package/dist/types.d.mts +248 -194
  40. package/dist/types.d.ts +248 -194
  41. package/dist/types.js +1 -1
  42. package/dist/types.mjs +1 -1
  43. package/dist/vite.js +7 -7
  44. package/dist/vite.mjs +6 -6
  45. package/dist/webpack.js +8 -7
  46. package/dist/webpack.mjs +7 -6
  47. package/dist/webpack4.js +53 -68
  48. package/dist/webpack4.mjs +52 -67
  49. package/package.json +10 -12
  50. package/dist/chunk-3AUX4FGE.mjs +0 -13
  51. package/dist/chunk-JXBLHLFR.mjs +0 -27
  52. package/dist/chunk-K3KFCISK.js +0 -145
  53. package/dist/chunk-LSSLYD6B.js +0 -13
  54. package/dist/chunk-O335YLYH.js +0 -27
  55. package/dist/chunk-RC2KZ2LO.mjs +0 -145
package/dist/types.d.ts CHANGED
@@ -16,273 +16,311 @@ interface HashMapValue {
16
16
  }
17
17
  type HashMapKey = string | number;
18
18
  type CacheValue = sources.Source | string;
19
+ interface CacheProcessResult<T extends CacheValue> {
20
+ result: T;
21
+ cacheValue?: CacheValue;
22
+ }
23
+ interface CacheProcessOptions<T extends CacheValue> {
24
+ key: string;
25
+ hashKey?: HashMapKey;
26
+ rawSource?: string | Buffer;
27
+ hash?: string;
28
+ resolveCache?: () => T | undefined;
29
+ transform: () => Promise<CacheProcessResult<T> | T>;
30
+ onCacheHit?: (value: T) => void | Promise<void>;
31
+ }
19
32
  interface ICreateCacheReturnType {
20
- hashMap: Map<HashMapKey, HashMapValue>;
21
- instance: LRUCache<string, CacheValue>;
33
+ readonly hashMap: Map<HashMapKey, HashMapValue>;
34
+ readonly instance: LRUCache<string, CacheValue>;
22
35
  hasHashKey: (key: HashMapKey) => boolean;
23
36
  getHashValue: (key: HashMapKey) => HashMapValue | undefined;
24
- setHashValue: (key: HashMapKey, value: HashMapValue) => this['hashMap'];
37
+ setHashValue: (key: HashMapKey, value: HashMapValue) => Map<HashMapKey, HashMapValue>;
25
38
  computeHash: (message: string | Buffer) => string;
26
39
  get: <V extends CacheValue = sources.Source>(key: string) => V | undefined;
27
- set: <V extends CacheValue = sources.Source>(key: string, value: V) => this['instance'];
40
+ set: <V extends CacheValue = sources.Source>(key: string, value: V) => LRUCache<string, CacheValue>;
28
41
  has: (key: string) => boolean;
29
- calcHashValueChanged: (key: HashMapKey, hash: string) => this;
30
- process: (key: string, callback: () => void | false | Promise<void | false>, fallback: () => void | {
31
- key: string;
32
- source: CacheValue;
33
- } | Promise<void | {
34
- key: string;
35
- source: CacheValue;
36
- }>) => void | Promise<void>;
42
+ calcHashValueChanged: (key: HashMapKey, hash: string) => ICreateCacheReturnType;
43
+ process: <T extends CacheValue>(options: CacheProcessOptions<T>) => Promise<T>;
37
44
  }
38
45
 
39
46
  interface UserDefinedOptions {
40
47
  /**
48
+ * 是否禁用此插件。
49
+ *
41
50
  * @group 0.重要配置
42
- * @description 是否禁用此插件,一般用于构建到多平台时使用,比如小程序时不传,非小程序环境(h5,app)传入一个 `true`
51
+ * @remarks
52
+ * 在多平台构建场景下常用:小程序构建保持默认,非小程序环境(H5、App)传入 `true` 即可跳过转换。
53
+ * @example
43
54
  * ```ts
44
- * // 比如 uni-app vue3 vite
55
+ * // uni-app vue3 vite
45
56
  * import process from 'node:process'
46
-
47
- const isH5 = process.env.UNI_PLATFORM === 'h5'
48
- const isApp = process.env.UNI_PLATFORM === 'app'
49
- const WeappTailwindcssDisabled = isH5 || isApp
50
-
51
- import { UnifiedViteWeappTailwindcssPlugin as uvtw } from 'weapp-tailwindcss/vite'
52
- // 注册插件
53
- // highlight-start
54
- uvtw({
55
- disabled: WeappTailwindcssDisabled,
56
- }),
57
- // highlight-end
57
+ *
58
+ * const isH5 = process.env.UNI_PLATFORM === 'h5'
59
+ * const isApp = process.env.UNI_PLATFORM === 'app'
60
+ * const disabled = isH5 || isApp
61
+ *
62
+ * import { UnifiedViteWeappTailwindcssPlugin as uvtw } from 'weapp-tailwindcss/vite'
63
+ *
64
+ * uvtw({
65
+ * disabled,
66
+ * })
58
67
  * ```
59
68
  */
60
69
  disabled?: boolean;
61
70
  /**
71
+ * 自定义 `wxml` 标签属性的转换规则。
72
+ *
62
73
  * @group 0.重要配置
63
- * @description **这是一个重要的配置!**
64
-
65
- 它可以自定义`wxml`标签上的`attr`转化属性。默认转化所有的`class`和`hover-class`,这个`Map`的 `key`为匹配标签,`value`为属性字符串或者匹配正则数组。
66
-
67
- 如果你想要增加,对于所有标签都生效的转化的属性,你可以添加 `*`: `(string | Regexp)[]` 这样的键值对。(`*` 是一个特殊值,代表所有标签)
68
-
69
- 更复杂的情况,可以传一个 `Map<string | Regex, (string | Regex)[]>`实例。
70
-
71
- 假如你要把 `className` 通过组件的`prop`传递给子组件,又或者想要自定义转化的标签属性时,需要用到此配置,案例详见:[issue#129](https://github.com/sonofmagic/weapp-tailwindcss/issues/129#issuecomment-1340914688),[issue#134](https://github.com/sonofmagic/weapp-tailwindcss/issues/134#issuecomment-1351288238)
72
-
73
- @example
74
-
75
- ```js
76
- const customAttributes = {
77
- // 匹配所有带 Class / class 相关的标签,比如某个组件上的 `a-class`, `testClass` , `custom-class` 里面的值
78
- '*': [ /[A-Za-z]?[A-Za-z-]*[Cc]lass/ ],
79
- // 额外匹配转化 `van-image` 标签上属性为 `custom-class` 的值
80
- 'van-image': ['custom-class'],
81
- // 转化所有 `ice-button` 标签上属性为 `testClass` 的值
82
- 'ice-button': ['testClass']
83
- }
84
- ```
85
-
86
- 当然你可以根据自己的需求,定义单个或者多个正则/字符串。
87
-
88
- 甚至有可能你编写正则表达式,它们匹配的范围,直接包括了插件里自带默认的 `class`/`hover-class`,那么这种情况下,你完全可以取代插件的默认模板转化器,开启 [disabledDefaultTemplateHandler](/docs/api/interfaces/UserDefinedOptions#disableddefaulttemplatehandler) 配置项,禁用默认的模版匹配转化器。
74
+ * @remarks
75
+ * 默认会转换所有标签上的 `class` 与 `hover-class`。此配置允许通过 `Map` 或对象为特定标签指定需要转换的属性字符串或正则表达式数组。
76
+ * - 使用 `'*'` 作为键可为所有标签追加通用规则。
77
+ * - 支持传入 `Map<string | RegExp, (string | RegExp)[]>` 以满足复杂匹配需求。
78
+ * - 常见场景包括通过组件 `prop` 传递类名,或对三方组件的自定义属性做匹配,更多讨论见 [issue#129](https://github.com/sonofmagic/weapp-tailwindcss/issues/129#issuecomment-1340914688) [issue#134](https://github.com/sonofmagic/weapp-tailwindcss/issues/134#issuecomment-1351288238)
79
+ * 如果自定义规则已经覆盖默认的 `class`/`hover-class`,可开启 [`disabledDefaultTemplateHandler`](/docs/api/interfaces/UserDefinedOptions#disableddefaulttemplatehandler) 以关闭内置模板处理器。
80
+ * @example
81
+ * ```js
82
+ * const customAttributes = {
83
+ * '*': [/[A-Za-z]?[A-Za-z-]*[Cc]lass/],
84
+ * 'van-image': ['custom-class'],
85
+ * 'ice-button': ['testClass'],
86
+ * }
87
+ * ```
89
88
  */
90
89
  customAttributes?: ICustomAttributes;
91
90
  /**
91
+ * 自定义 class 名称的替换字典。
92
+ *
92
93
  * @group 0.重要配置
93
- * @description 自定义转化class名称字典,这个配置项用来自定义转化`class`名称字典,你可以使用这个选项来简化生成的`class`
94
- - 默认模式: 把小程序中不允许的字符串,转义为**相等长度**的代替字符串,这种情况不追求转化目标字符串的一比一绝对等价,即无法从生成结果,反推原先的`class`
95
-
96
- 当然,你也可以自定义,传一个 `Record<string, string>` 类型,只需保证转化后 css 中的 `class` 选择器,不会和自己定义的 `class` 产生冲突即可,示例见[dic.ts](https://github.com/sonofmagic/weapp-core/blob/main/packages/escape/src/dic.ts)
94
+ * @remarks
95
+ * 默认策略会将小程序不允许的字符映射为等长度的替代字符串,因此无法通过结果反推出原始类名。如需完全自定义,可传入 `Record<string, string>`,只需确保生成的类名不会与已有样式冲突。示例参考 [dic.ts](https://github.com/sonofmagic/weapp-core/blob/main/packages/escape/src/dic.ts)。
97
96
  * @default MappingChars2String
98
97
  */
99
98
  customReplaceDictionary?: Record<string, string>;
100
99
  /**
100
+ * 忽略指定标签模板表达式中的标识符。
101
+ *
101
102
  * @version `^4.0.0`
102
103
  * @group 0.重要配置
103
- * @description js 忽略标签模板表达式中的标识符,这样使用标识符包裹的模板字符串不会被转义
104
+ * @remarks
105
+ * 当模板字符串被这些标识符包裹时,将跳过转义处理。
104
106
  * @default ['weappTwIgnore']
105
107
  */
106
108
  ignoreTaggedTemplateExpressionIdentifiers?: (string | RegExp)[];
107
109
  /**
110
+ * 忽略指定调用表达式中的标识符。
111
+ *
108
112
  * @version `^4.0.0`
109
113
  * @group 0.重要配置
110
- * @description js 忽略调用表达式中的标识符,这样使用这个方法,包裹的模板字符串和字符串字面量不会被转义,一般用来配合 `@weapp-tailwindcss/merge` 使用,比如设置为 `['twMerge', 'twJoin', 'cva']`
114
+ * @remarks
115
+ * 使用这些方法包裹的模板字符串或字符串字面量会跳过转义,常与 `@weapp-tailwindcss/merge` 配合(如 `['twMerge', 'twJoin', 'cva']`)。
111
116
  */
112
117
  ignoreCallExpressionIdentifiers?: (string | RegExp)[];
113
118
  /**
119
+ * 控制在视图节点上注入的 CSS 预设。
120
+ *
114
121
  * @group 0.重要配置
115
122
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/7
116
- * @description 在所有 view节点添加的 css 预设,可根据情况自由的禁用原先的规则,或者添加新的规则。默认预置 `css` 同 `tailwindcss` 类似,详细用法如下:
123
+ * @remarks
124
+ * 默认会向所有 `view`/`text` 元素注入 Tailwind 风格的基础样式,可通过此配置禁用、调整或补充规则,受 `cssPreflightRange` 影响。
125
+ * @example
117
126
  * ```js
118
- * // default 默认,这代表会添加给所有的 view / text 元素, 受到 cssPreflightRange 配置项影响 :
119
- cssPreflight: {
120
- 'box-sizing': 'border-box',
121
- 'border-width': '0',
122
- 'border-style': 'solid',
123
- 'border-color': 'currentColor'
124
- }
125
- // result
126
- // box-sizing: border-box;
127
- // border-width: 0;
128
- // border-style: solid;
129
- // border-color: currentColor
130
-
131
- // case 禁用所有
132
- cssPreflight: false
133
- // result
134
- // none
135
-
136
- // case 禁用单个属性
137
- cssPreflight: {
138
- 'box-sizing': false
139
- }
140
- // border-width: 0;
141
- // border-style: solid;
142
- // border-color: currentColor
143
-
144
- // case 更改和添加单个属性
145
- cssPreflight: {
146
- 'box-sizing': 'content-box',
147
- 'background': 'black'
148
- }
149
- // result
150
- // box-sizing: content-box;
151
- // border-width: 0;
152
- // border-style: solid;
153
- // border-color: currentColor;
154
- // background: black
127
+ * cssPreflight: {
128
+ * 'box-sizing': 'border-box',
129
+ * 'border-width': '0',
130
+ * 'border-style': 'solid',
131
+ * 'border-color': 'currentColor',
132
+ * }
133
+ *
134
+ * cssPreflight: false
135
+ *
136
+ * cssPreflight: {
137
+ * 'box-sizing': false,
138
+ * background: 'black',
139
+ * }
155
140
  * ```
156
141
  */
157
142
  cssPreflight?: CssPreflightOptions;
158
143
  /**
144
+ * 控制 `cssPreflight` 注入的 DOM 选择器范围。
145
+ *
159
146
  * @group 0.重要配置
160
147
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/pull/62
161
- * @description 全局`dom`选择器,只有在这个选择器作用范围内的`dom`会被注入 `cssPreflight` 的变量和默认样式。只对所有的 `view`,`text` 和伪元素生效,想要对所有的元素生效,可切换为 `'all'`,此时需要自行处理和客户端默认样式的冲突
148
+ * @remarks
149
+ * 仅 `view`、`text` 及其伪元素会受影响。设置为 `'all'` 可以覆盖所有元素,此时需自行处理与宿主默认样式的冲突。
162
150
  */
163
151
  cssPreflightRange?: 'all';
164
152
  /**
153
+ * 预计算 CSS 变量或 `calc` 表达式的结果。
154
+ *
165
155
  * @group 0.重要配置
166
156
  * @version `^4.3.0`
167
- * @description css calc 配置项, 用于直接计算 css 变量的结果值,通常用于手机兼容性处理,这个是为了解决 css 中的 calc 函数的表现,在不同手机机型上不一致的问题
157
+ * @remarks
158
+ * 解决部分机型对 `calc` 计算不一致的问题,可传入布尔值、选项对象或自定义匹配列表(支持正则)。在启用计算后,可通过 `includeCustomProperties` 指定需要保留的变量。
159
+ * @example
160
+ * ```css
161
+ * // 原始输出
162
+ * page,
163
+ * :root {
164
+ * --spacing: 8rpx;
165
+ * }
166
+ * .h-2 {
167
+ * height: calc(var(--spacing) * 2);
168
+ * }
169
+ * ```
170
+ *
171
+ * ```css
172
+ * // 启用 cssCalc 后
173
+ * .h-2 {
174
+ * height: 16rpx;
175
+ * height: calc(var(--spacing) * 2);
176
+ * }
177
+ * ```
178
+ *
179
+ * ```js
180
+ * cssCalc: ['--spacing']
181
+ * cssCalc: { includeCustomProperties: ['--spacing'] }
182
+ * ```
168
183
  */
169
184
  cssCalc?: boolean | CssCalcOptions | (string | RegExp)[];
170
185
  /**
186
+ * 是否额外注入 `tailwindcss css var scope`。
187
+ *
171
188
  * @group 0.重要配置
172
189
  * @version `^2.6.0`
173
- * @description 是否注入额外的 `tailwindcss css var scope` 区域,这个选项用于这样的场景
174
- *
175
- * 比如 `taro vue3` 使用 [NutUI](https://nutui.jd.com), 需要使用 `@tarojs/plugin-html`,而这个插件会启用 `postcss-html-transform` 从而移除所有带 `*` 选择器
176
- *
177
- * 这会导致 `tailwindcss css var scope` 区域被移除导致一些样式,比如渐变等等功能失效
178
- *
179
- * 这种场景下,启用这个选项会再次重新注入整个 `tailwindcss css var scope`
180
- *
190
+ * @remarks
191
+ * 当构建链路(例如 `@tarojs/plugin-html`)移除了包含 `*` 的选择器时,可启用该选项重新写入变量作用域,以避免渐变等功能失效。
181
192
  * @default false
182
193
  */
183
194
  injectAdditionalCssVarScope?: boolean;
184
195
  /**
196
+ * 控制 CSS 选择器的替换规则。
197
+ *
185
198
  * @group 0.重要配置
186
- * @description 用于处理 css 选择器的替换规则
187
199
  */
188
200
  cssSelectorReplacement?: {
189
201
  /**
202
+ * 将全局选择器 `:root` 替换为指定值。
203
+ *
190
204
  * @default `'page'` <br/>
191
- * @description 把`css`中的全局选择器 **`:root`** 替换为指定值,默认替换为 `'page'`,设置为 `false` 时不进行替换
192
- * @example 假如你使用微信小程序的 RootPortal 组件,你需要把此项设置为 ['page','wx-root-content']
205
+ * @remarks
206
+ * 设置为 `false` 时不再替换,可根据宿主环境(例如 RootPortal)传入数组值。
207
+ * @example
208
+ * root: ['page', 'wx-root-content']
193
209
  */
194
210
  root?: string | string[] | false;
195
211
  /**
212
+ * 将全局选择器 `*` 替换为指定值。
213
+ *
196
214
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/81 <br/>
197
215
  * @default `['view','text']` <br/>
198
- * @description 把`css`中的全局选择器 **`*`** 替换为指定值,默认替换为 `'view','text'`,设置为 `false` 时不进行替换,此时小程序会由于不认识`*`选择器而报错
216
+ * @remarks
217
+ * 小程序环境不支持 `*`,因此默认转换为 `view`、`text`;设置为 `false` 会留下原始选择器。
199
218
  */
200
219
  universal?: string | string[] | false;
201
220
  };
202
221
  /**
222
+ * rem 到 rpx 的转换配置。
223
+ *
203
224
  * @version `^3.0.0`
204
225
  * @group 0.重要配置
205
- * @description rem 转 rpx 配置,默认为 `undefined` 不开启,可传入 `true` 启用默认配置项,也可传入自定义配置项,配置项列表见 [postcss-rem-to-responsive-pixel](https://www.npmjs.com/package/postcss-rem-to-responsive-pixel)
226
+ * @remarks
227
+ * 传入 `true` 使用默认配置,或提供 [postcss-rem-to-responsive-pixel](https://www.npmjs.com/package/postcss-rem-to-responsive-pixel) 支持的完整选项。
206
228
  * ```ts
207
- * // 默认值
208
229
  * {
209
- * rootValue: 32,
210
- * propList: ['*'],
211
- * transformUnit: 'rpx',
230
+ * rootValue: 32,
231
+ * propList: ['*'],
232
+ * transformUnit: 'rpx',
212
233
  * }
213
234
  * ```
214
235
  */
215
236
  rem2rpx?: boolean | Rem2rpxOptions;
216
237
  /**
238
+ * px 到 rpx 的转换配置。
239
+ *
217
240
  * @group 0.重要配置
218
241
  * @version `^4.3.0`
219
- * @description rem 转 rpx 配置,默认为 `undefined` 不开启,可传入 `true` 启用默认配置项 1px = 1rpx
242
+ * @remarks
243
+ * 传入 `true` 启用默认映射(`1px = 1rpx`),或通过对象自定义更多行为。
220
244
  */
221
245
  px2rpx?: boolean | Px2rpxOptions;
222
246
  /**
247
+ * `postcss-preset-env` 的配置项。
248
+ *
223
249
  * @version `^4.0.0`
224
250
  * @group 0.重要配置
225
- * @description postcss-preset-env 的入参数
226
- * 参考文档
227
- * https://preset-env.cssdb.org/
228
- * https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env#readme
251
+ * @see https://preset-env.cssdb.org/
252
+ * @see https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env#readme
229
253
  */
230
254
  cssPresetEnv?: PresetEnvOptions;
231
255
  /**
256
+ * 为不同版本的 Tailwind 配置行为。
257
+ *
232
258
  * @version `^4.0.0`
233
259
  * @group 0.重要配置
234
- * @description 配置不同版本 tailwindcss 的行为
235
260
  */
236
261
  tailwindcss?: PatchOptions['tailwindcss'];
237
262
  /**
263
+ * 指定 tailwindcss@4 的入口 CSS。
264
+ *
238
265
  * @version `^4.2.6`
239
266
  * @group 0.重要配置
240
- * @description tailwindcss@4 的入口 css 的位置,假如不配置这个选项, 就无法加载自定义插件。等价于传入 tailwindcss.v4.cssEntries
267
+ * @remarks
268
+ * 未配置时无法加载自定义插件,等价于设置 `tailwindcss.v4.cssEntries`。
241
269
  */
242
270
  cssEntries?: string[];
243
271
  /**
272
+ * 配置 uni-app x 场景的行为。
273
+ *
244
274
  * @version `^4.2.0`
245
275
  * @group 0.重要配置
246
276
  * @ignore
247
- * @description uni-app x 的配置
248
277
  */
249
278
  uniAppX?: boolean;
250
279
  }
251
280
  interface UserDefinedOptions {
252
281
  /**
282
+ * 匹配需要处理的 `wxml` 等模板文件。
283
+ *
253
284
  * @group 1.文件匹配
254
- * @description 匹配 `wxml`等等模板进行处理的方法
255
285
  */
256
286
  htmlMatcher?: (name: string) => boolean;
257
287
  /**
288
+ * 匹配需要处理的 `wxss` 等样式文件。
289
+ *
258
290
  * @group 1.文件匹配
259
- * @description 匹配 `wxss` 等等样式文件的方法
260
291
  */
261
292
  cssMatcher?: (name: string) => boolean;
262
293
  /**
294
+ * 匹配需要处理的编译后 `js` 文件。
295
+ *
263
296
  * @group 1.文件匹配
264
- * @description 匹配编译后 `js` 文件进行处理的方法
265
297
  */
266
298
  jsMatcher?: (name: string) => boolean;
267
299
  /**
268
- * @group 1.文件匹配
269
- * @description `tailwindcss css var inject scope` 的匹配方法,用于处理原始变量和替换不兼容选择器。可以不传,但是遇到某些 `::before/::after` 选择器注入冲突时,建议传入参数手动指定 css bundle 文件位置
300
+ * 匹配负责注入 Tailwind CSS 变量作用域的 CSS Bundle。
270
301
  *
302
+ * @group 1.文件匹配
303
+ * @remarks
304
+ * 在处理 `::before`/`::after` 等不兼容选择器时,建议手动指定文件位置。
271
305
  */
272
306
  mainCssChunkMatcher?: (name: string, appType?: AppType) => boolean;
273
307
  /**
308
+ * 匹配各端的 `wxs`/`sjs`/`.filter.js` 文件。
309
+ *
274
310
  * @group 1.文件匹配
275
311
  * @experiment 实验性质,有可能会改变
276
- * @description 各个平台 `wxs` 文件的匹配方法,可以设置为包括微信的 .wxs,支付宝的 .sjs 和 百度小程序的 .filter.js
277
- * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
312
+ * @remarks
313
+ * 配置前请确保在 `tailwind.config.js` `content` 中包含对应格式。
278
314
  * @default ()=>false
279
315
  */
280
316
  wxsMatcher?: (name: string) => boolean;
281
317
  /**
318
+ * 是否转义 `wxml` 中的内联 `wxs`。
319
+ *
282
320
  * @group 1.文件匹配
283
321
  * @experiment 实验性质,有可能会改变
284
- * @description 是否转义 `wxml` 中内联的 `wxs`
285
- * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
322
+ * @remarks
323
+ * 使用前同样需要在 `tailwind.config.js` 中声明 `wxs` 格式。
286
324
  * @example
287
325
  * ```html
288
326
  * <!-- index.wxml -->
@@ -303,185 +341,201 @@ interface UserDefinedOptions {
303
341
  }
304
342
  interface UserDefinedOptions {
305
343
  /**
344
+ * 插件 `apply` 初始调用时触发。
345
+ *
306
346
  * @group 2.生命周期
307
- * @description plugin apply 初调用
308
347
  */
309
348
  onLoad?: () => void;
310
349
  /**
350
+ * 开始处理前触发。
351
+ *
311
352
  * @group 2.生命周期
312
- * @description 开始处理时调用
313
353
  */
314
354
  onStart?: () => void;
315
355
  /**
316
- * @description 匹配成功并修改文件内容前调用
356
+ * 匹配并修改文件内容前触发。
357
+ *
358
+ * @group 2.生命周期
317
359
  */
318
360
  /**
361
+ * 匹配并修改文件后触发。
362
+ *
319
363
  * @group 2.生命周期
320
- * @description 匹配成功并修改文件内容后调用
321
364
  */
322
365
  onUpdate?: (filename: string, oldVal: string, newVal: string) => void;
323
366
  /**
367
+ * 结束处理时触发。
368
+ *
324
369
  * @group 2.生命周期
325
- * @description 结束处理时调用
326
370
  */
327
371
  onEnd?: () => void;
328
372
  }
329
373
  interface UserDefinedOptions {
330
374
  /**
375
+ * 控制 Tailwind 自定义长度单位补丁。
376
+ *
331
377
  * @group 3.一般配置
332
378
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/110
333
- * @description 自从`tailwindcss 3.2.0`对任意值添加了长度单位的校验后,小程序中的`rpx`这个`wxss`单位,由于不在长度合法名单中,于是被识别成了颜色,导致与预期不符,详见:[issues/110](https://github.com/sonofmagic/weapp-tailwindcss/issues/110)。所以这个选项是用来给`tailwindcss`运行时,自动打上一个支持`rpx`单位的补丁。默认开启,在绝大部分情况下,你都可以忽略这个配置项,除非你需要更高级的自定义。
334
- > 目前自动检索可能存在一定的缺陷,它会在第一次运行的时候不生效,关闭后第二次运行才生效。这是因为 nodejs 运行时先加载好了 `tailwindcss` 模块 ,然后再来运行这个插件,自动给 `tailwindcss` 运行时打上 `patch`。此时由于 `tailwindcss` 模块已经加载,所以 `patch` 在第一次运行时不生效,`ctrl+c` 关闭之后,再次运行才生效。这种情况可以使用:
335
-
336
- ```diff
337
- "scripts": {
338
- + "postinstall": "weapp-tw patch"
339
- }
340
- ```
341
-
342
- 使用 `npm hooks` 的方式来给 `tailwindcss` 自动打 `patch`
379
+ * @remarks
380
+ * TailwindCSS 3.2.0 起对任意值执行长度单位校验,会将未声明的 `rpx` 识别为颜色。本选项默认开启以注入 `rpx` 支持。当 Node.js 在插件执行前已缓存 `tailwindcss` 模块时,首轮运行可能未生效,可通过在 `postinstall` 中执行 `weapp-tw patch` 提前打补丁。
381
+ * ```diff
382
+ * "scripts": {
383
+ * + "postinstall": "weapp-tw patch"
384
+ * }
385
+ * ```
343
386
  */
344
387
  supportCustomLengthUnitsPatch?: ILengthUnitsPatchOptions | boolean;
345
388
  /**
389
+ * 声明所使用的框架类型。
390
+ *
346
391
  * @group 3.一般配置
347
- * @description 使用的框架类型(uni-app,taro...),用于找到主要的 `css bundle` 进行转化,这个配置会影响默认方法 `mainCssChunkMatcher` 的行为,不传会去猜测 `tailwindcss css var inject scope` (tailwindcss 变量注入的位置) 的位置
392
+ * @remarks
393
+ * 用于辅助定位主要的 CSS bundle,以便默认的 `mainCssChunkMatcher` 做出更准确的匹配,未传入时将尝试自动猜测变量注入位置。
348
394
  */
349
395
  appType?: AppType;
350
396
  /**
397
+ * TailwindCSS 任意值的相关配置。
398
+ *
351
399
  * @group 3.一般配置
352
- * @description 针对 tailwindcss arbitrary values 的一些配置
353
400
  */
354
401
  arbitraryValues?: IArbitraryValues;
355
402
  /**
403
+ * 控制 JS 字面量是否需要保留。
404
+ *
356
405
  * @group 3.一般配置
357
406
  * @version `^2.6.1`
358
- * @description 当 `tailwindcss` 和 `js` 处理的字面量撞车的时候,配置此选项可以用来保留js字面量,不进行转义处理。返回值中,想要当前js字面量保留,则返回 `true`。想要转义则返回 `false/undefined`
359
- * @default 保留所有带 `*` js字符串字面量
407
+ * @remarks
408
+ * Tailwind 与 JS 字面量冲突时,可通过回调返回 `true` 保留当前值,返回 `false` 或 `undefined` 则继续转义。默认保留所有带 `*` 的字符串字面量。
360
409
  */
361
410
  jsPreserveClass?: (keyword: string) => boolean | undefined;
362
411
  /**
412
+ * 禁用默认的 `wxml` 模板替换器。
413
+ *
363
414
  * @group 3.一般配置
364
415
  * @version `^2.6.2`
365
- * @description 开启此选项,将会禁用默认 `wxml` 模板替换器,此时模板的匹配和转化将完全被 [`customAttributes`](/docs/api/interfaces/UserDefinedOptions#customattributes) 接管,
366
- *
367
- * 此时你需要自己编写匹配之前默认 `class`/`hover-class`,以及新的标签属性的正则表达式`regex`
416
+ * @remarks
417
+ * 启用后模板匹配完全交由 [`customAttributes`](/docs/api/interfaces/UserDefinedOptions#customattributes) 管理,需要自行覆盖默认的 `class` / `hover-class` 等匹配规则。
368
418
  * @default false
369
419
  */
370
420
  disabledDefaultTemplateHandler?: boolean;
371
421
  /**
422
+ * 内部使用的运行时加载器路径。
423
+ *
372
424
  * @ignore
373
425
  * @internal
374
426
  */
375
427
  runtimeLoaderPath?: string;
376
428
  /**
429
+ * 指定用于获取 Tailwind 上下文的路径。
430
+ *
377
431
  * @group 3.一般配置
378
432
  * @version `^2.9.3`
379
- * @description 用于指定路径来获取 tailwindcss 上下文,一般情况下不用传入,使用 linked / monorepo 可能需要指定具体位置,路径通常是目标项目的 package.json 所在目录
433
+ * @remarks
434
+ * 在 linked 或 monorepo 场景下可手动指向目标项目的 `package.json` 所在目录。
380
435
  */
381
436
  tailwindcssBasedir?: string;
382
437
  /**
438
+ * 控制缓存策略。
439
+ *
383
440
  * @group 3.一般配置
384
441
  * @version `^3.0.11`
385
- * @description 缓存策略
386
442
  */
387
443
  cache?: boolean | ICreateCacheReturnType;
388
444
  /**
445
+ * `@babel/parser` 的配置选项。
446
+ *
389
447
  * @version `^3.2.0`
390
448
  * @group 3.一般配置
391
- * @description 对解析 js 使用的 `@babel/parser` 工具的配置
392
449
  */
393
450
  babelParserOptions?: ParserOptions & {
394
451
  cache?: boolean;
395
452
  };
396
453
  /**
397
- * @group 3.一般配置
398
- * @description 用于控制 tailwindcss 子组合器的生效标签范围, 这里我们用一个例子来说明这个配置是干啥用的.
399
- *
400
- * 我们布局的时候往往会使用 `space-x-4`
401
- * 那么实际上会生成这样的css选择器:
402
- * ```css
403
- * .space-x-4>:not([hidden])~:not([hidden]){}
404
- * ```
405
- * 然而很不幸,这个选择器在小程序中是不支持的,写了会报错导致编译失败。
406
- * 所以出于保守起见,我把它替换为了:
407
- * ```css
408
- * .space-x-4>view + view{}
409
- * ```
410
- * 这同时也是默认值, 而这个选项就允许你进行自定义子组合器的行为
454
+ * 自定义 Tailwind 子组合器的替换值。
411
455
  *
412
- * 你可以传入一个 字符串,或者字符串数组
413
- * 1. 传入字符串数组,比如 `['view','text']` 生成:
456
+ * @group 3.一般配置
457
+ * @remarks
458
+ * 为兼容小程序缺乏 `:not([hidden])~` 支持的限制,默认会将 `.space-x-4` 等选择器替换为 `view + view`。可传入字符串或字符串数组以扩展适用标签。
414
459
  * ```css
460
+ * // 数组示例
415
461
  * .space-y-4>view + view,text + text{}
416
- * ```
417
462
  *
418
- * 2. 传入一个字符串,此时行为变成了整个替换,比如 `'view,text,button,input ~ view,text,button,input'` 生成:
419
- * ```css
463
+ * // 字符串示例
420
464
  * .space-y-4>view,text,button,input ~ view,text,button,input{}
421
465
  * ```
422
466
  * @default 'view + view'
423
467
  */
424
468
  cssChildCombinatorReplaceValue?: string | string[];
425
469
  /**
470
+ * `postcss` 的配置选项。
471
+ *
426
472
  * @version `^3.2.0`
427
473
  * @group 3.一般配置
428
- * @description 对解析 css 使用的 `postcss` 工具的配置
429
474
  */
430
475
  postcssOptions?: LoadedPostcssOptions;
431
476
  /**
477
+ * 是否移除 CSS 中的 `:hover` 选择器。
478
+ *
432
479
  * @version `^3.2.1`
433
480
  * @group 3.一般配置
434
481
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/293
482
+ * @remarks
483
+ * 小程序不支持 `:hover`,需要使用组件的 `hover-class`,因此默认删除相关节点。
435
484
  * @default `true`
436
- * @description 是否删除 css :hover 选择器节点,默认为 `true`, 原因在于,小程序 css :hover 是不生效的,要使用 view 这种标签的 hover-class 属性
437
485
  */
438
486
  cssRemoveHoverPseudoClass?: boolean;
439
487
  /**
488
+ * 是否移除 `@property` 节点。
489
+ *
440
490
  * @version `^4.1.2`
441
491
  * @group 3.一般配置
492
+ * @remarks
493
+ * 微信小程序可识别 `@property`,但支付宝暂不支持,默认移除以避免构建失败。
442
494
  * @default `true`
443
- * @description 是否删除 `@property` 选择器节点,默认为 `true`, 原因在于,现在微信小程序的 `@property` 是生效的,但是支付宝小程序遇到这个会直接挂掉
444
495
  */
445
496
  cssRemoveProperty?: boolean;
446
497
  /**
498
+ * 自定义 patcher 参数。
499
+ *
447
500
  * @group 3.一般配置
448
- * @description 自定义 patcher 参数
449
501
  */
450
502
  tailwindcssPatcherOptions?: TailwindcssPatcherOptions;
451
503
  /**
504
+ * 控制命令行日志输出级别。
505
+ *
452
506
  * @group 3.一般配置
453
- * @description 控制命令行日志的输出,默认为 `info`,可以设置成 `silent` 来禁止所有的命令行输出
507
+ * @remarks
508
+ * 默认 `info`,可设置为 `silent` 屏蔽全部输出。
454
509
  */
455
510
  logLevel?: 'info' | 'warn' | 'error' | 'silent';
456
511
  }
457
512
  interface UserDefinedOptions {
458
513
  /**
514
+ * 选择用于解析 JS 的 AST 工具。
515
+ *
459
516
  * @group 4.即将废弃配置
460
- * @description 对解析 js 使用的 ast 工具,默认情况使用 `babel`,可以通过安装 `@ast-grep/napi`,同时启用 `ast-grep` 配置项,来启用 `ast-grep` 来处理 `js`,速度会是 `babel` 的 `2` 倍左右
517
+ * @remarks
518
+ * 默认使用 `babel`,安装 `@ast-grep/napi` 并设置为 `ast-grep` 可获得更快速度。
461
519
  * :::danger
462
- * 此配置即将在 `5.x` 被弃用
463
- *
464
- * 废弃原因:
465
- *
466
- * 虽然 `@ast-grep/napi` 提供了更快的速度,但是 `babel` 有更强的静态分析 `js` 能力,使得后续一些新功能的开发无法使用 `@ast-grep/napi` 实现,所以废弃只保留 `babel` 的方式
520
+ * 此配置将在 `5.x` 版本移除,后续仅保留 `babel` 实现。
467
521
  * :::
468
522
  */
469
523
  jsAstTool?: 'babel' | 'ast-grep';
470
524
  /**
525
+ * 是否对指定范围的类名执行压缩混淆。
526
+ *
471
527
  * @group 4.即将废弃配置
472
- * @description 是否压缩混淆 `wxml`,`js` 和 `wxss` 中指定范围的 `class` 以避免选择器过长问题,默认为`false`不开启,详细配置见 [unplugin-tailwindcss-mangle](https://github.com/sonofmagic/tailwindcss-mangle/tree/main/packages/unplugin-tailwindcss-mangle)
528
+ * @remarks
529
+ * 默认关闭,可参考 [unplugin-tailwindcss-mangle](https://github.com/sonofmagic/tailwindcss-mangle/tree/main/packages/unplugin-tailwindcss-mangle) 获取完整配置。
473
530
  * :::danger
474
- * 此配置即将在 `5.x` 被弃用
475
- *
476
- * 废弃原因:
477
- *
478
- * mangle 相关的功能会被迁移到另外一个项目: [`tailwindcss-mangle`](https://github.com/sonofmagic/tailwindcss-mangle) 中去,还想要这个功能可以2个插件结合使用
531
+ * 此配置将在 `5.x` 中移除,功能已迁移至 [`tailwindcss-mangle`](https://github.com/sonofmagic/tailwindcss-mangle)。
479
532
  * :::
480
533
  */
481
534
  mangle?: boolean | IMangleOptions;
482
535
  /**
536
+ * 自定义 PostCSS 规则的处理回调。
537
+ *
483
538
  * @group 4.即将废弃配置
484
- * @description 用于自定义处理 css 的回调函数,可根据 Postcss walk 方法自由定制处理方案的 callback 方法
485
539
  */
486
540
  customRuleCallback?: CustomRuleCallback;
487
541
  }