css2class 2.0.0 → 2.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 (40) hide show
  1. package/.github/workflows/deploy-docs.yml +53 -0
  2. package/.head_config.mjs +68 -0
  3. package/CONFIG.md +38 -1
  4. package/README.md +595 -633
  5. package/bin/class2css.js +32 -4
  6. package/common.css +1 -1
  7. package/configs/typography.config.js +1 -0
  8. package/docs/.vitepress/config.mjs +68 -65
  9. package/docs/guide/cli.md +97 -97
  10. package/docs/guide/config-template.md +16 -1
  11. package/docs/guide/config.md +129 -64
  12. package/docs/guide/faq.md +202 -202
  13. package/docs/guide/getting-started.md +86 -83
  14. package/docs/guide/incremental.md +164 -162
  15. package/docs/guide/rules-reference.md +73 -1
  16. package/docs/index.md +71 -68
  17. package/examples/weapp/README.md +15 -0
  18. package/examples/weapp/class2css.config.js +70 -0
  19. package/examples/weapp/src/placeholder.wxml +0 -0
  20. package/examples/weapp/styles.config.js +201 -0
  21. package/examples/web/README.md +25 -0
  22. package/examples/web/class2css.config.js +70 -0
  23. package/examples/web/demo.html +105 -0
  24. package/examples/web/src/placeholder.html +5 -0
  25. package/examples/web/styles.config.js +201 -0
  26. package/package.json +7 -2
  27. package/src/README.md +99 -0
  28. package/src/core/ConfigManager.js +440 -431
  29. package/src/core/FullScanManager.js +438 -430
  30. package/src/generators/DynamicClassGenerator.js +270 -72
  31. package/src/index.js +1091 -1046
  32. package/src/parsers/ClassParser.js +8 -2
  33. package/src/utils/CssFormatter.js +400 -47
  34. package/src/utils/UnitProcessor.js +4 -3
  35. package/src/watchers/ConfigWatcher.js +413 -413
  36. package/src/watchers/FileWatcher.js +148 -133
  37. package/src/writers/FileWriter.js +444 -302
  38. package/src/writers/UnifiedWriter.js +413 -370
  39. package/class2css.config.js +0 -124
  40. package/styles.config.js +0 -250
@@ -13,19 +13,14 @@ Class2CSS 通过 `class2css.config.js` 文件进行配置。配置文件支持
13
13
 
14
14
  可以通过 CLI 参数 `-c, --config` 指定自定义路径。
15
15
 
16
- ## 最小配置(可运行)
16
+ ## 最小配置(推荐做法)
17
17
 
18
- ```js
19
- module.exports = {
20
- system: { baseUnit: 'rpx', unitConversion: 2, cssFormat: 'compressed' },
21
- output: { path: '../dist', fileName: 'styles.wxss' },
22
- cssName: {
23
- m: { classArr: ['margin'], unit: 'rpx' },
24
- w: { classArr: ['width'], unit: 'rpx' },
25
- h: { classArr: ['height'], unit: 'rpx' },
26
- },
27
- };
28
- ```
18
+ 当前版本建议直接从示例配置改起(更完整、并且与运行时校验一致):
19
+
20
+ - **小程序(wxss / rpx)**:`examples/weapp/class2css.config.js` + `examples/weapp/styles.config.js`
21
+ - **Web(css / px)**:`examples/web/class2css.config.js` + `examples/web/styles.config.js`
22
+
23
+ 你可以先用 `-c` 跑起来,再逐步改 `multiFile.entry.path` / `multiFile.output`。
29
24
 
30
25
  ## 配置结构
31
26
 
@@ -34,68 +29,53 @@ module.exports = {
34
29
  新版本引入了 `system` 配置节,提供更强大的功能:
35
30
 
36
31
  ```javascript
32
+ // 推荐把“规则”拆到 styles.config.js,然后在主配置里引入,便于复用/维护
33
+ const stylesConfig = require('./styles.config.js');
34
+
37
35
  module.exports = {
38
- // ========== 系统基础配置 ==========
39
36
  system: {
40
- // CSS 输出格式: 'multiLine' | 'singleLine' | 'compressed'
41
- cssFormat: "compressed",
42
- // 基础单位设置
43
- baseUnit: "rpx",
44
- // 单位转换比例 生成样式单位=设置单位*比例
37
+ cssFormat: 'compressed',
38
+ baseUnit: 'rpx',
45
39
  unitConversion: 2,
46
- // 是否压缩CSS
47
40
  compression: true,
48
- // 是否对生成的CSS类进行字母排序(按选择器名称)
49
41
  sortClasses: true,
50
- // 智能单位处理策略
51
42
  unitStrategy: {
52
43
  autoDetect: true,
53
44
  propertyUnits: {
54
45
  'font-size': 'rpx',
55
46
  'width|height': 'rpx',
56
- 'opacity': '',
47
+ opacity: '',
57
48
  'z-index': '',
58
49
  'line-height': '',
59
- 'border-radius': 'rpx'
60
- }
61
- }
50
+ 'border-radius': 'rpx',
51
+ },
52
+ },
62
53
  },
63
54
 
64
- // ========== 输出配置 ==========
65
- output: {
66
- path: "../dist",
67
- fileName: "styles.wxss"
68
- },
55
+ // 单文件输出(非 multiFile 时使用;当前版本运行时通常会走 multiFile)
56
+ output: { path: './dist', fileName: 'styles.wxss' },
69
57
 
70
- // ========== CSS类映射 ==========
71
- cssName: {
72
- "m": { classArr: ["margin"], unit: "rpx" },
73
- "w": { classArr: ["width"], unit: "rpx" },
74
- "h": { classArr: ["height"], unit: "rpx" }
58
+ importantFlags: stylesConfig.importantFlags,
59
+
60
+ // 多文件扫描/监听入口 + 输出策略(当前版本推荐)
61
+ multiFile: {
62
+ entry: { path: './src', fileType: ['wxml', 'html'] },
63
+ output: { cssOutType: 'uniFile', path: './dist', fileName: 'styles.wxss', fileType: 'wxss' },
75
64
  },
76
65
 
77
- // ========== 静态类配置 ==========
78
- baseClassName: {
79
- "container": "max-width: 1200rpx; margin: 0 auto;",
80
- "flex": "display: flex;"
81
- }
66
+ // 规则(来自 styles.config.js)
67
+ atomicRules: stylesConfig.atomicRules,
68
+ baseClassName: stylesConfig.baseClassName,
69
+ variants: stylesConfig.variants,
70
+ breakpoints: stylesConfig.breakpoints,
82
71
  };
83
72
  ```
84
73
 
85
- ### 向后兼容
74
+ ### 兼容与迁移
86
75
 
87
- 工具完全兼容旧版配置格式:
76
+ 历史版本里常见的是 `cssName` / `baseClassName` 的配置方式;当前版本推荐以 `atomicRules` / `baseClassName` 为主,并把规则拆到 `styles.config.js` 便于维护。
88
77
 
89
- ```javascript
90
- // 旧版配置仍然有效
91
- module.exports = {
92
- baseUnit: "rpx", // 自动映射到 system.baseUnit
93
- unitConversion: 2, // 自动映射到 system.unitConversion
94
- output: { /* ... */ },
95
- cssName: { /* ... */ },
96
- baseClassName: { /* ... */ }
97
- };
98
- ```
78
+ 如果你是从旧配置升级,建议直接对照示例配置做迁移(或参考仓库根目录的 `MIGRATION.md`)。
99
79
 
100
80
  ## 配置项说明
101
81
 
@@ -149,6 +129,44 @@ unitStrategy: {
149
129
 
150
130
  也可以先阅读概念页:[单位与转换策略](./units.md)。
151
131
 
132
+ ### variants 配置(响应式 + states 伪类)
133
+
134
+ `variants` 用来声明可用的变体前缀(Tailwind 风格),当前支持:
135
+ - **responsive**:`sm:` / `md:` / `lg:` / `xl:` / `2xl:`(通过 `@media(min-width:...)` 包裹)
136
+ - **states**:`hover:` / `focus:` / `active:` / `disabled:` / `first:` / `last:` / `odd:` / `even:`(通过伪类选择器实现)
137
+
138
+ 示例(Web/小程序模板语法均可):
139
+
140
+ ```html
141
+ <!-- hover 伪类 -->
142
+ <div class="hover:w-20 hover:bg-red"></div>
143
+
144
+ <!-- focus 伪类 -->
145
+ <input class="focus:w-30" />
146
+
147
+ <!-- active 伪类 -->
148
+ <button class="active:opacity-50"></button>
149
+
150
+ <!-- 组合:响应式 + hover -->
151
+ <div class="lg:hover:w-20"></div>
152
+ ```
153
+
154
+ 生成选择器示例(以 `hover:w-20` 为例):
155
+
156
+ ```css
157
+ .hover\:w-20:hover { width: 20px; }
158
+ ```
159
+
160
+ `states` 映射规则:
161
+ - `hover` → `:hover`
162
+ - `focus` → `:focus`
163
+ - `active` → `:active`
164
+ - `disabled` → `:disabled`
165
+ - `first` → `:first-child`
166
+ - `last` → `:last-child`
167
+ - `odd` → `:nth-child(odd)`
168
+ - `even` → `:nth-child(even)`
169
+
152
170
  ### output 配置
153
171
 
154
172
  #### path
@@ -163,16 +181,20 @@ unitStrategy: {
163
181
 
164
182
  公共基础样式文件路径(如果你希望每次输出都带上一段统一的基础 CSS)。
165
183
 
166
- ### cssName 配置
184
+ ### atomicRules 配置(动态规则)
167
185
 
168
- CSS类映射,定义类名到CSS属性的映射关系:
186
+ 推荐使用 `atomicRules` 描述“动态类 → CSS 属性”的规则(当前版本运行时会从 `atomicRules` 构建内部映射)。
169
187
 
170
188
  ```javascript
171
- cssName: {
172
- "m": { classArr: ["margin"], unit: "rpx" },
173
- "mt": { classArr: ["margin-top"], unit: "rpx" },
174
- "w": { classArr: ["width"], unit: "rpx" },
175
- "h": { classArr: ["height"], unit: "rpx" }
189
+ atomicRules: {
190
+ spacing: {
191
+ m: { properties: ["margin"], defaultUnit: "rpx" },
192
+ mt: { properties: ["margin-top"], defaultUnit: "rpx" }
193
+ },
194
+ sizing: {
195
+ w: { properties: ["width"], defaultUnit: "rpx" },
196
+ h: { properties: ["height"], defaultUnit: "rpx" }
197
+ }
176
198
  }
177
199
  ```
178
200
 
@@ -188,6 +210,46 @@ baseClassName: {
188
210
  }
189
211
  ```
190
212
 
213
+ #### 颜色族配置
214
+
215
+ 对于颜色相关的类,可以使用 `ABBR` 属性定义颜色族,然后通过颜色映射或直接颜色值来使用:
216
+
217
+ ```javascript
218
+ baseClassName: {
219
+ // 颜色族:使用 ABBR 定义 CSS 属性名
220
+ color: { ABBR: "color" },
221
+ bg: { ABBR: "background-color" },
222
+ bcolor: { ABBR: "border-color" },
223
+
224
+ // 其他静态类...
225
+ flex: "display: flex;"
226
+ }
227
+
228
+ // 颜色映射(通常在 styles.config.js 中定义)
229
+ const baseColor = {
230
+ white: "#ffffff",
231
+ black: "#000000",
232
+ red: "#ef4444",
233
+ // ... 更多颜色
234
+ };
235
+
236
+ // 动态合并颜色映射到颜色族
237
+ Object.values(baseClassName).forEach((item) => {
238
+ if (item && item.ABBR) {
239
+ Object.assign(item, baseColor);
240
+ }
241
+ });
242
+ ```
243
+
244
+ 使用方式:
245
+
246
+ - **颜色映射**:`bg-red`、`color-white`(需要预先配置)
247
+ - **直接颜色值**:`bg-hex-fff`、`color-rgb-255-0-0`、`bg-rgba-0-0-0-05`(无需配置)
248
+
249
+ :::tip 直接颜色值写法
250
+ 现在支持直接在 class 中写入颜色值,无需预先配置颜色映射。详见 [规则参考 - 颜色](./rules-reference.md#直接颜色值写法无需配置)。
251
+ :::
252
+
191
253
  也可以阅读概念页:[Important 与静态类](./important-and-static.md)。
192
254
 
193
255
  ### multiFile 配置(多文件模式)
@@ -243,14 +305,17 @@ module.exports = {
243
305
  };
244
306
 
245
307
  // class2css.config.js
246
- const spacing = require('./configs/spacing.config');
308
+ const stylesConfig = require('./styles.config.js');
309
+ const spacingRules = require('./configs/spacing.config');
247
310
 
248
311
  module.exports = {
249
312
  system: { /* ... */ },
250
- cssName: {
251
- ...spacing.margin,
252
- // 其他配置
253
- }
313
+ atomicRules: {
314
+ ...stylesConfig.atomicRules,
315
+ // 把你拆出来的规则合并进去(按类别合并)
316
+ ...spacingRules,
317
+ },
318
+ baseClassName: stylesConfig.baseClassName,
254
319
  };
255
320
  ```
256
321
 
package/docs/guide/faq.md CHANGED
@@ -1,202 +1,202 @@
1
- # 常见问题
2
-
3
- 本页按“能最快定位问题”的方式组织:先看现象,再给最短修复路径,最后给进一步的排查方向。
4
-
5
- ## 配置相关
6
-
7
- ### 配置冲突
8
-
9
- **问题**:出现 `CSS property conflict detected for 'font-size'` 错误
10
-
11
- **解决**:
12
- 1. 运行配置诊断工具检查冲突:
13
- ```javascript
14
- const ConfigDiagnostics = require('class2css/src/utils/ConfigDiagnostics');
15
- const diagnostics = new ConfigDiagnostics(eventBus, configManager);
16
- const results = await diagnostics.runFullDiagnostics();
17
- console.log(diagnostics.generateReport());
18
- ```
19
- 2. 检查 `cssName` 和 `atomicRules` 中是否有重复定义
20
- 3. 使用配置验证工具自动修复:
21
- ```javascript
22
- const ConfigValidator = require('class2css/src/core/ConfigValidator');
23
- const validator = new ConfigValidator(eventBus);
24
- const result = validator.validateConfig(config);
25
- if (!result.isValid) {
26
- const fixed = validator.autoFix(config);
27
- }
28
- ```
29
-
30
- ### 单位不一致
31
-
32
- **问题**:警告 `Unit inconsistency detected`
33
-
34
- **解决**:
35
- 1. 启用 `autoDetect`:
36
- ```javascript
37
- system: {
38
- unitStrategy: {
39
- autoDetect: true,
40
- propertyUnits: { /* ... */ }
41
- }
42
- }
43
- ```
44
- 2. 统一单位配置,确保所有相关配置使用相同的单位
45
-
46
- 如果你想系统理解单位规则,建议直接阅读 [单位与转换策略](./units.md)。
47
-
48
- ### 配置文件找不到
49
-
50
- **问题**:`Configuration file not found`
51
-
52
- **解决**:
53
- 1. 确保项目根目录存在 `class2css.config.js`
54
- 2. 或使用 `-c` 参数指定配置文件路径:
55
- ```bash
56
- class2css -c ./my-config.js
57
- ```
58
-
59
- ## 性能相关
60
-
61
- ### 性能问题
62
-
63
- **问题**:CSS 生成速度慢
64
-
65
- **解决**:
66
- 1. 启用缓存:
67
- ```javascript
68
- system: {
69
- compression: true
70
- }
71
- ```
72
- 2. 使用增量更新模式
73
- 3. 检查文件监听范围,避免监听不必要的目录
74
-
75
- ### 内存使用过高
76
-
77
- **问题**:工具占用内存过多
78
-
79
- **解决**:
80
- 1. 检查缓存配置,适当降低缓存大小
81
- 2. 使用增量模式,减少全量扫描频率
82
- 3. 检查是否有大量未使用的 class 累积
83
-
84
- ## 增量模式相关
85
-
86
- ### 输出文件不断增长
87
-
88
- **问题**:使用增量模式后,输出文件越来越大
89
-
90
- **解决**:
91
- 1. 这是增量模式的正常行为(只增不删)
92
- 2. 定期重启工具,`rebuildOnStart: true` 会自动清理
93
- 3. 手动删除输出文件后重启,会重新生成干净的文件
94
-
95
- ### appendDelta 模式不生效
96
-
97
- **问题**:设置了 `uniFileWriteMode: 'appendDelta'` 但没有效果
98
-
99
- **解决**:
100
- 1. 确保 `rebuildOnStart: true`(appendDelta 模式要求)
101
- 2. 确保 `cssOutType: 'uniFile'`
102
- 3. 检查输出文件是否包含 `/* CLASS2CSS:BASE */` 和 `/* CLASS2CSS:DELTA_START */` 标记
103
-
104
- ## 文件监听相关
105
-
106
- ### 文件变更不触发更新
107
-
108
- **问题**:修改文件后,CSS 没有更新
109
-
110
- **解决**:
111
- 1. 检查文件是否在监听范围内(`multiFile.entry.path`,支持 `string | string[]` 多入口)
112
- 2. 检查文件扩展名是否匹配(`multiFile.entry.fileType`)
113
- 3. 确认监听模式已启用(未使用 `--no-watch`)
114
- 4. 检查文件保存是否完整(某些编辑器可能分步保存)
115
-
116
- ### 监听延迟
117
-
118
- **问题**:文件变更后,CSS 更新有延迟
119
-
120
- **解决**:
121
- 1. 这是正常的防抖行为,避免频繁更新
122
- 2. 延迟通常在 100ms 以内
123
- 3. 如需立即更新,可以手动触发全量扫描
124
-
125
- ## 输出相关
126
-
127
- ### CSS 格式不正确
128
-
129
- **问题**:生成的 CSS 格式不符合预期
130
-
131
- **解决**:
132
- 1. 检查 `system.cssFormat` 设置:
133
- - `'multiLine'`:多行格式
134
- - `'singleLine'`:单行格式
135
- - `'compressed'`:压缩格式
136
- 2. 检查 `system.sortClasses` 是否启用排序
137
-
138
- ### 输出文件路径错误
139
-
140
- **问题**:输出文件不在预期位置
141
-
142
- **解决**:
143
- 1. 检查 `output.path` 配置(相对路径基于配置文件所在目录)
144
- 2. 使用绝对路径避免路径问题
145
- 3. 使用 CLI 参数 `-o` 覆盖输出路径:
146
- ```bash
147
- class2css -o ./dist
148
- ```
149
-
150
- ## 诊断工具
151
-
152
- ### 运行配置诊断
153
-
154
- ```javascript
155
- const ConfigDiagnostics = require('class2css/src/utils/ConfigDiagnostics');
156
-
157
- const diagnostics = new ConfigDiagnostics(eventBus, configManager);
158
- const results = await diagnostics.runFullDiagnostics();
159
- console.log(diagnostics.generateReport());
160
-
161
- // 获取优化建议
162
- const suggestions = diagnostics.generateOptimizationSuggestions();
163
- console.log(suggestions);
164
- ```
165
-
166
- ### 获取优化建议
167
-
168
- 诊断工具会自动生成优化建议,包括:
169
- - 高优先级:配置错误,必须修复
170
- - 中优先级:配置警告,建议修复
171
- - 低优先级:最佳实践建议
172
-
173
- ## 其他问题
174
-
175
- ### 版本兼容性
176
-
177
- **问题**:从旧版本升级后出现问题
178
-
179
- **解决**:
180
- 1. Class2CSS 完全向后兼容旧版配置
181
- 2. 旧版配置会自动映射到新版结构
182
- 3. 使用兼容性适配器迁移:
183
- ```javascript
184
- const CompatibilityAdapter = require('class2css/src/core/CompatibilityAdapter');
185
- const adapter = new CompatibilityAdapter(eventBus);
186
- const adaptedConfig = adapter.adaptConfig(oldConfig);
187
- ```
188
-
189
- ### 获取帮助
190
-
191
- 如果以上方法无法解决问题:
192
-
193
- 1. 查看 [GitHub Issues](https://github.com/wnagchi/css2class/issues)
194
- 2. 提交新的 Issue,附上:
195
- - 配置文件(脱敏后)
196
- - 错误信息
197
- - 复现步骤
198
- - 环境信息(Node 版本、操作系统等)
199
-
200
- ## 下一步
201
-
202
- - 跑通一次并确认输出是否符合预期:阅读 [快速开始](./getting-started.md)
1
+ # 常见问题
2
+
3
+ 本页按“能最快定位问题”的方式组织:先看现象,再给最短修复路径,最后给进一步的排查方向。
4
+
5
+ ## 配置相关
6
+
7
+ ### 配置冲突
8
+
9
+ **问题**:出现 `CSS property conflict detected for 'font-size'` 错误
10
+
11
+ **解决**:
12
+ 1. 运行配置诊断工具检查冲突:
13
+ ```javascript
14
+ const ConfigDiagnostics = require('class2css/src/utils/ConfigDiagnostics');
15
+ const diagnostics = new ConfigDiagnostics(eventBus, configManager);
16
+ const results = await diagnostics.runFullDiagnostics();
17
+ console.log(diagnostics.generateReport());
18
+ ```
19
+ 2. 检查 `cssName` 和 `atomicRules` 中是否有重复定义
20
+ 3. 使用配置验证工具自动修复:
21
+ ```javascript
22
+ const ConfigValidator = require('class2css/src/core/ConfigValidator');
23
+ const validator = new ConfigValidator(eventBus);
24
+ const result = validator.validateConfig(config);
25
+ if (!result.isValid) {
26
+ const fixed = validator.autoFix(config);
27
+ }
28
+ ```
29
+
30
+ ### 单位不一致
31
+
32
+ **问题**:警告 `Unit inconsistency detected`
33
+
34
+ **解决**:
35
+ 1. 启用 `autoDetect`:
36
+ ```javascript
37
+ system: {
38
+ unitStrategy: {
39
+ autoDetect: true,
40
+ propertyUnits: { /* ... */ }
41
+ }
42
+ }
43
+ ```
44
+ 2. 统一单位配置,确保所有相关配置使用相同的单位
45
+
46
+ 如果你想系统理解单位规则,建议直接阅读 [单位与转换策略](./units.md)。
47
+
48
+ ### 配置文件找不到
49
+
50
+ **问题**:`Configuration file not found`
51
+
52
+ **解决**:
53
+ 1. 确保项目根目录存在 `class2css.config.js`
54
+ 2. 或使用 `-c` 参数指定配置文件路径:
55
+ ```bash
56
+ class2css -c ./my-config.js
57
+ ```
58
+
59
+ ## 性能相关
60
+
61
+ ### 性能问题
62
+
63
+ **问题**:CSS 生成速度慢
64
+
65
+ **解决**:
66
+ 1. 启用缓存:
67
+ ```javascript
68
+ system: {
69
+ compression: true
70
+ }
71
+ ```
72
+ 2. 使用增量更新模式
73
+ 3. 检查文件监听范围,避免监听不必要的目录
74
+
75
+ ### 内存使用过高
76
+
77
+ **问题**:工具占用内存过多
78
+
79
+ **解决**:
80
+ 1. 检查缓存配置,适当降低缓存大小
81
+ 2. 使用增量模式,减少全量扫描频率
82
+ 3. 检查是否有大量未使用的 class 累积
83
+
84
+ ## 增量模式相关
85
+
86
+ ### 输出文件不断增长
87
+
88
+ **问题**:使用增量模式后,输出文件越来越大
89
+
90
+ **解决**:
91
+ 1. 这是增量模式的正常行为(只增不删)
92
+ 2. 定期重启工具,`rebuildOnStart: true` 会自动清理
93
+ 3. 手动删除输出文件后重启,会重新生成干净的文件
94
+
95
+ ### appendDelta 模式不生效
96
+
97
+ **问题**:设置了 `uniFileWriteMode: 'appendDelta'` 但没有效果
98
+
99
+ **解决**:
100
+ 1. 确保 `rebuildOnStart: true`(appendDelta 模式要求)
101
+ 2. 确保 `cssOutType: 'uniFile'`
102
+ 3. 检查输出文件是否包含 `/* CLASS2CSS:BASE */` 和 `/* CLASS2CSS:DELTA_START */` 标记
103
+
104
+ ## 文件监听相关
105
+
106
+ ### 文件变更不触发更新
107
+
108
+ **问题**:修改文件后,CSS 没有更新
109
+
110
+ **解决**:
111
+ 1. 检查文件是否在监听范围内(`multiFile.entry.path`,支持 `string | string[]` 多入口)
112
+ 2. 检查文件扩展名是否匹配(`multiFile.entry.fileType`)
113
+ 3. 确认监听模式已启用(未使用 `--no-watch`)
114
+ 4. 检查文件保存是否完整(某些编辑器可能分步保存)
115
+
116
+ ### 监听延迟
117
+
118
+ **问题**:文件变更后,CSS 更新有延迟
119
+
120
+ **解决**:
121
+ 1. 这是正常的防抖行为,避免频繁更新
122
+ 2. 延迟通常在 100ms 以内
123
+ 3. 如需立即更新,可以手动触发全量扫描
124
+
125
+ ## 输出相关
126
+
127
+ ### CSS 格式不正确
128
+
129
+ **问题**:生成的 CSS 格式不符合预期
130
+
131
+ **解决**:
132
+ 1. 检查 `system.cssFormat` 设置:
133
+ - `'multiLine'`:多行格式
134
+ - `'singleLine'`:单行格式
135
+ - `'compressed'`:压缩格式
136
+ 2. 检查 `system.sortClasses` 是否启用排序
137
+
138
+ ### 输出文件路径错误
139
+
140
+ **问题**:输出文件不在预期位置
141
+
142
+ **解决**:
143
+ 1. 检查 `output.path` 配置(相对路径基于配置文件所在目录)
144
+ 2. 使用绝对路径避免路径问题
145
+ 3. 使用 CLI 参数 `-o` 覆盖输出路径:
146
+ ```bash
147
+ class2css -o ./dist
148
+ ```
149
+
150
+ ## 诊断工具
151
+
152
+ ### 运行配置诊断
153
+
154
+ ```javascript
155
+ const ConfigDiagnostics = require('class2css/src/utils/ConfigDiagnostics');
156
+
157
+ const diagnostics = new ConfigDiagnostics(eventBus, configManager);
158
+ const results = await diagnostics.runFullDiagnostics();
159
+ console.log(diagnostics.generateReport());
160
+
161
+ // 获取优化建议
162
+ const suggestions = diagnostics.generateOptimizationSuggestions();
163
+ console.log(suggestions);
164
+ ```
165
+
166
+ ### 获取优化建议
167
+
168
+ 诊断工具会自动生成优化建议,包括:
169
+ - 高优先级:配置错误,必须修复
170
+ - 中优先级:配置警告,建议修复
171
+ - 低优先级:最佳实践建议
172
+
173
+ ## 其他问题
174
+
175
+ ### 版本兼容性
176
+
177
+ **问题**:从旧版本升级后出现问题
178
+
179
+ **解决**:
180
+ 1. Class2CSS 完全向后兼容旧版配置
181
+ 2. 旧版配置会自动映射到新版结构
182
+ 3. 使用兼容性适配器迁移:
183
+ ```javascript
184
+ const CompatibilityAdapter = require('class2css/src/core/CompatibilityAdapter');
185
+ const adapter = new CompatibilityAdapter(eventBus);
186
+ const adaptedConfig = adapter.adaptConfig(oldConfig);
187
+ ```
188
+
189
+ ### 获取帮助
190
+
191
+ 如果以上方法无法解决问题:
192
+
193
+ 1. 查看 [GitHub Issues](https://github.com/wnagchi/css2class/issues)
194
+ 2. 提交新的 Issue,附上:
195
+ - 配置文件(脱敏后)
196
+ - 错误信息
197
+ - 复现步骤
198
+ - 环境信息(Node 版本、操作系统等)
199
+
200
+ ## 下一步
201
+
202
+ - 跑通一次并确认输出是否符合预期:阅读 [快速开始](./getting-started.md)