css2class 2.0.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 (57) hide show
  1. package/API.md +1143 -0
  2. package/CHANGELOG.md +291 -0
  3. package/CONFIG.md +1096 -0
  4. package/CONTRIBUTING.md +571 -0
  5. package/MIGRATION.md +402 -0
  6. package/README.md +634 -0
  7. package/bin/class2css.js +380 -0
  8. package/class2css.config.js +124 -0
  9. package/common.css +3 -0
  10. package/configs/colors.config.js +62 -0
  11. package/configs/layout.config.js +110 -0
  12. package/configs/spacing.config.js +37 -0
  13. package/configs/typography.config.js +41 -0
  14. package/docs/.vitepress/config.mjs +65 -0
  15. package/docs/.vitepress/theme/custom.css +74 -0
  16. package/docs/.vitepress/theme/index.js +7 -0
  17. package/docs/guide/cli.md +97 -0
  18. package/docs/guide/concepts.md +63 -0
  19. package/docs/guide/config-template.md +365 -0
  20. package/docs/guide/config.md +275 -0
  21. package/docs/guide/faq.md +202 -0
  22. package/docs/guide/getting-started.md +83 -0
  23. package/docs/guide/important-and-static.md +67 -0
  24. package/docs/guide/incremental.md +162 -0
  25. package/docs/guide/rules-reference.md +354 -0
  26. package/docs/guide/units.md +57 -0
  27. package/docs/index.md +68 -0
  28. package/package.json +49 -0
  29. package/run.js +90 -0
  30. package/src/README.md +571 -0
  31. package/src/core/CacheManager.js +650 -0
  32. package/src/core/CompatibilityAdapter.js +264 -0
  33. package/src/core/ConfigManager.js +431 -0
  34. package/src/core/ConfigValidator.js +350 -0
  35. package/src/core/EventBus.js +77 -0
  36. package/src/core/FullScanManager.js +430 -0
  37. package/src/core/StateManager.js +631 -0
  38. package/src/docs/DocsServer.js +179 -0
  39. package/src/example.js +106 -0
  40. package/src/generators/DynamicClassGenerator.js +674 -0
  41. package/src/index.js +1046 -0
  42. package/src/parsers/ClassParser.js +572 -0
  43. package/src/parsers/ImportantParser.js +279 -0
  44. package/src/parsers/RegexCompiler.js +200 -0
  45. package/src/utils/ClassChangeTracker.js +366 -0
  46. package/src/utils/ConfigDiagnostics.js +673 -0
  47. package/src/utils/CssFormatter.js +261 -0
  48. package/src/utils/FileUtils.js +230 -0
  49. package/src/utils/Logger.js +150 -0
  50. package/src/utils/Throttle.js +172 -0
  51. package/src/utils/UnitProcessor.js +334 -0
  52. package/src/utils/WxssClassExtractor.js +137 -0
  53. package/src/watchers/ConfigWatcher.js +413 -0
  54. package/src/watchers/FileWatcher.js +133 -0
  55. package/src/writers/FileWriter.js +302 -0
  56. package/src/writers/UnifiedWriter.js +370 -0
  57. package/styles.config.js +250 -0
package/MIGRATION.md ADDED
@@ -0,0 +1,402 @@
1
+ # 配置迁移指南
2
+
3
+ 本指南帮助您从旧版本的 Class2CSS 配置迁移到新的优化版本。
4
+
5
+ ## 🔄 迁移概览
6
+
7
+ ### 版本兼容性
8
+
9
+ - ✅ **完全向后兼容**: 旧版配置继续正常工作
10
+ - 🆕 **新功能**: 通过新配置格式解锁高级特性
11
+ - 🚀 **性能提升**: 新配置带来显著的性能改进
12
+
13
+ ## 📋 迁移检查清单
14
+
15
+ ### 1. 基础配置迁移
16
+
17
+ #### 旧版配置
18
+ ```javascript
19
+ module.exports = {
20
+ baseUnit: "rpx",
21
+ unitConversion: 2,
22
+ output: {
23
+ path: "../dist",
24
+ fileName: "styles.wxss"
25
+ },
26
+ cssName: {
27
+ "m": { classArr: ["margin"], unit: "rpx" }
28
+ },
29
+ baseClassName: {
30
+ "container": "max-width: 1200rpx; margin: 0 auto;"
31
+ }
32
+ };
33
+ ```
34
+
35
+ #### 新版配置(推荐)
36
+ ```javascript
37
+ module.exports = {
38
+ // ========== 新增系统配置 ==========
39
+ system: {
40
+ baseUnit: "rpx",
41
+ unitConversion: 2,
42
+ compression: true, // 🆕 CSS压缩
43
+ unitStrategy: { // 🆕 智能单位策略
44
+ autoDetect: true,
45
+ propertyUnits: {
46
+ 'font-size': 'rpx',
47
+ 'width|height': 'rpx',
48
+ 'opacity': '',
49
+ 'z-index': ''
50
+ }
51
+ }
52
+ },
53
+
54
+ // ========== 原有配置保持不变 ==========
55
+ output: {
56
+ path: "../dist",
57
+ fileName: "styles.wxss"
58
+ },
59
+ cssName: {
60
+ "m": { classArr: ["margin"], unit: "rpx" }
61
+ },
62
+ baseClassName: {
63
+ "container": "max-width: 1200rpx; margin: 0 auto;"
64
+ }
65
+ };
66
+ ```
67
+
68
+ ### 2. 逐步迁移策略
69
+
70
+ #### 阶段 1: 保持现有配置(0 风险)
71
+ ```javascript
72
+ // 继续使用旧配置,工具自动兼容
73
+ module.exports = {
74
+ baseUnit: "rpx", // 自动映射到 system.baseUnit
75
+ unitConversion: 2, // 自动映射到 system.unitConversion
76
+ output: { /* ... */ },
77
+ cssName: { /* ... */ },
78
+ baseClassName: { /* ... */ }
79
+ };
80
+ ```
81
+
82
+ #### 阶段 2: 启用基础新功能
83
+ ```javascript
84
+ module.exports = {
85
+ // 添加基础系统配置
86
+ system: {
87
+ baseUnit: "rpx",
88
+ unitConversion: 2,
89
+ compression: true // 🆕 启用CSS压缩
90
+ },
91
+
92
+ // 保持原有配置
93
+ output: { /* ... */ },
94
+ cssName: { /* ... */ },
95
+ baseClassName: { /* ... */ }
96
+ };
97
+ ```
98
+
99
+ #### 阶段 3: 完整新配置
100
+ ```javascript
101
+ module.exports = {
102
+ system: {
103
+ baseUnit: "rpx",
104
+ unitConversion: 2,
105
+ compression: true,
106
+ unitStrategy: { // 🆕 智能单位策略
107
+ autoDetect: true,
108
+ propertyUnits: {
109
+ 'font-size': 'rpx',
110
+ 'width|height': 'rpx',
111
+ 'opacity': '',
112
+ 'z-index': ''
113
+ }
114
+ }
115
+ },
116
+ output: { /* ... */ },
117
+ cssName: { /* ... */ },
118
+ baseClassName: { /* ... */ }
119
+ };
120
+ ```
121
+
122
+ ## 🆕 新功能启用
123
+
124
+ ### 1. 智能单位处理
125
+
126
+ ```javascript
127
+ system: {
128
+ unitStrategy: {
129
+ autoDetect: true, // 自动检测单位
130
+ propertyUnits: {
131
+ // 为特定属性配置默认单位
132
+ 'font-size': 'rpx',
133
+ 'width|height': 'rpx',
134
+ 'opacity': '', // 无单位
135
+ 'z-index': '', // 无单位
136
+ 'line-height': '', // 可以无单位
137
+ 'border-radius': 'rpx'
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ **效果对比**:
144
+ ```html
145
+ <!-- 旧版本 -->
146
+ <view class="text-14"> <!-- font-size: 28rpx; -->
147
+
148
+ <!-- 新版本(智能处理) -->
149
+ <view class="text-14"> <!-- font-size: 28rpx; -->
150
+ <view class="text-14px"> <!-- font-size: 14px; (保持原单位) -->
151
+ <view class="opacity-05"> <!-- opacity: 0.5; (自动无单位) -->
152
+ ```
153
+
154
+ ### 2. 配置压缩
155
+
156
+ ```javascript
157
+ system: {
158
+ compression: true // 启用CSS压缩
159
+ }
160
+ ```
161
+
162
+ ### 3. 缓存优化
163
+
164
+ ```javascript
165
+ system: {
166
+ cache: {
167
+ enableFileCache: true,
168
+ enableCssGenerationCache: true,
169
+ maxCssGenerationCacheSize: 5000
170
+ }
171
+ }
172
+ ```
173
+
174
+ ## 🔧 配置模块化
175
+
176
+ ### 拆分大型配置
177
+
178
+ #### 创建模块化配置文件
179
+
180
+ ```javascript
181
+ // configs/spacing.config.js
182
+ module.exports = {
183
+ margin: {
184
+ "m": { classArr: ["margin"], unit: "rpx" },
185
+ "mt": { classArr: ["margin-top"], unit: "rpx" },
186
+ "mr": { classArr: ["margin-right"], unit: "rpx" },
187
+ "mb": { classArr: ["margin-bottom"], unit: "rpx" },
188
+ "ml": { classArr: ["margin-left"], unit: "rpx" }
189
+ },
190
+ padding: {
191
+ "p": { classArr: ["padding"], unit: "rpx" },
192
+ "pt": { classArr: ["padding-top"], unit: "rpx" },
193
+ "pr": { classArr: ["padding-right"], unit: "rpx" },
194
+ "pb": { classArr: ["padding-bottom"], unit: "rpx" },
195
+ "pl": { classArr: ["padding-left"], unit: "rpx" }
196
+ }
197
+ };
198
+
199
+ // configs/typography.config.js
200
+ module.exports = {
201
+ fontSize: {
202
+ "text": { classArr: ["font-size"], unit: "rpx" }
203
+ },
204
+ fontWeight: {
205
+ "font-thin": { classArr: ["font-weight"], unit: "-", value: "100" },
206
+ "font-normal": { classArr: ["font-weight"], unit: "-", value: "400" },
207
+ "font-bold": { classArr: ["font-weight"], unit: "-", value: "700" }
208
+ }
209
+ };
210
+
211
+ // configs/colors.config.js
212
+ module.exports = {
213
+ baseColors: {
214
+ primary: "#007bff",
215
+ secondary: "#6c757d",
216
+ success: "#28a745",
217
+ danger: "#dc3545"
218
+ },
219
+ colorClasses: {
220
+ "text-primary": { classArr: ["color"], unit: "-", value: "#007bff" },
221
+ "bg-primary": { classArr: ["background-color"], unit: "-", value: "#007bff" }
222
+ }
223
+ };
224
+ ```
225
+
226
+ #### 在主配置中引用
227
+
228
+ ```javascript
229
+ // class2css.config.js
230
+ const spacing = require('./configs/spacing.config');
231
+ const typography = require('./configs/typography.config');
232
+ const colors = require('./configs/colors.config');
233
+
234
+ module.exports = {
235
+ system: {
236
+ baseUnit: "rpx",
237
+ unitConversion: 2,
238
+ compression: true
239
+ },
240
+
241
+ output: {
242
+ path: "../dist",
243
+ fileName: "styles.wxss"
244
+ },
245
+
246
+ cssName: {
247
+ ...spacing.margin,
248
+ ...spacing.padding,
249
+ ...typography.fontSize,
250
+ ...colors.colorClasses
251
+ },
252
+
253
+ baseClassName: {
254
+ "container": "max-width: 1200rpx; margin: 0 auto;",
255
+ "flex": "display: flex;",
256
+ "flex-center": "display: flex; justify-content: center; align-items: center;"
257
+ }
258
+ };
259
+ ```
260
+
261
+ ## 🛠️ 自动迁移工具
262
+
263
+ ### 使用内置迁移工具
264
+
265
+ ```javascript
266
+ const { CompatibilityAdapter } = require('class2css');
267
+
268
+ // 读取旧配置
269
+ const oldConfig = require('./class2css.config.js');
270
+
271
+ // 创建适配器
272
+ const adapter = new CompatibilityAdapter(eventBus);
273
+
274
+ // 自动迁移到新格式
275
+ const migratedConfig = adapter.migrateToNewFormat(oldConfig);
276
+
277
+ // 生成迁移报告
278
+ const report = adapter.generateMigrationReport(oldConfig, migratedConfig);
279
+ console.log(report);
280
+
281
+ // 保存新配置
282
+ const fs = require('fs');
283
+ fs.writeFileSync(
284
+ 'class2css.config.new.js',
285
+ `module.exports = ${JSON.stringify(migratedConfig, null, 2)};`
286
+ );
287
+ ```
288
+
289
+ ### 配置验证
290
+
291
+ ```javascript
292
+ const { ConfigValidator } = require('class2css');
293
+
294
+ const validator = new ConfigValidator(eventBus);
295
+ const result = validator.validateConfig(migratedConfig);
296
+
297
+ if (!result.isValid) {
298
+ console.log('迁移后配置存在问题:');
299
+ result.errors.forEach(error => console.log('❌', error));
300
+ result.warnings.forEach(warning => console.log('⚠️', warning));
301
+
302
+ // 自动修复
303
+ const fixedConfig = validator.autoFix(migratedConfig);
304
+ console.log('✅ 已自动修复配置问题');
305
+ }
306
+ ```
307
+
308
+ ## 📊 配置诊断
309
+
310
+ ### 运行配置诊断
311
+
312
+ ```javascript
313
+ const { ConfigDiagnostics } = require('class2css');
314
+
315
+ const diagnostics = new ConfigDiagnostics(eventBus, configManager);
316
+ const results = await diagnostics.runFullDiagnostics();
317
+
318
+ // 生成诊断报告
319
+ console.log(diagnostics.generateReport());
320
+
321
+ // 获取优化建议
322
+ const suggestions = diagnostics.generateOptimizationSuggestions();
323
+ suggestions.high.forEach(s => console.log('🔴 高优先级:', s.suggestion));
324
+ suggestions.medium.forEach(s => console.log('🟡 中优先级:', s.suggestion));
325
+ ```
326
+
327
+ ## ⚠️ 迁移注意事项
328
+
329
+ ### 1. 配置冲突处理
330
+
331
+ 迁移后可能出现的冲突:
332
+
333
+ ```javascript
334
+ // 可能的冲突示例
335
+ cssName: {
336
+ "text": { classArr: ["font-size"], unit: "rpx" },
337
+ "font": { classArr: ["font-size"], unit: "rpx" } // ❌ 冲突
338
+ }
339
+ ```
340
+
341
+ **解决方案**:
342
+ ```javascript
343
+ // 使用配置验证器自动检测和修复
344
+ const validator = new ConfigValidator(eventBus);
345
+ const fixedConfig = validator.autoFix(config);
346
+ ```
347
+
348
+ ### 2. 性能注意事项
349
+
350
+ - **启用缓存**: 新版本默认启用多种缓存机制
351
+ - **压缩CSS**: 建议在生产环境启用
352
+ - **增量更新**: 自动启用,提升大项目性能
353
+
354
+ ### 3. 向后兼容性保证
355
+
356
+ - ✅ 旧版配置继续工作
357
+ - ✅ API 调用保持兼容
358
+ - ✅ 生成的CSS格式不变
359
+ - ✅ 类名使用方式不变
360
+
361
+ ## 🔍 迁移验证
362
+
363
+ ### 1. 功能验证
364
+
365
+ ```bash
366
+ # 运行工具确保基本功能正常
367
+ npm run start
368
+
369
+ # 检查生成的CSS是否符合预期
370
+ diff old_styles.css new_styles.css
371
+ ```
372
+
373
+ ### 2. 性能对比
374
+
375
+ ```javascript
376
+ // 迁移前后性能对比
377
+ const stats = cacheManager.getCacheStats();
378
+ console.log('缓存命中率:', stats.cssGeneration.hitRate);
379
+ console.log('内存使用:', stats.memoryUsage);
380
+ ```
381
+
382
+ ### 3. 配置健康检查
383
+
384
+ ```javascript
385
+ // 运行完整诊断
386
+ const diagnostics = new ConfigDiagnostics(eventBus, configManager);
387
+ const results = await diagnostics.runFullDiagnostics();
388
+ console.log('配置健康分数:', results.overall.percentage);
389
+ ```
390
+
391
+ ## 📞 获取帮助
392
+
393
+ 如果在迁移过程中遇到问题:
394
+
395
+ 1. **查看诊断报告**: 运行配置诊断获取详细信息
396
+ 2. **使用自动修复**: 尝试配置验证器的自动修复功能
397
+ 3. **查看日志**: 检查工具输出的详细日志
398
+ 4. **提交 Issue**: 在 GitHub 上反馈问题
399
+
400
+ ---
401
+
402
+ > 💡 迁移建议:先在测试环境验证,确认无误后再应用到生产环境。