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/src/README.md ADDED
@@ -0,0 +1,571 @@
1
+ # Class2CSS 模块化架构
2
+
3
+ 这是 Class2CSS 工具的模块化重构版本,将原有的单文件架构拆分为多个独立模块,提高了代码的可维护性、可测试性和可扩展性。
4
+
5
+ ## 架构概览
6
+
7
+ ```
8
+ src/
9
+ ├── core/ # 核心模块
10
+ │ ├── EventBus.js # 事件总线
11
+ │ ├── StateManager.js # 状态管理器
12
+ │ ├── ConfigManager.js # 配置管理器
13
+ │ ├── CacheManager.js # 缓存管理器
14
+ │ └── FullScanManager.js # 全量扫描管理器 (新增)
15
+ ├── parsers/ # 解析器模块
16
+ │ ├── RegexCompiler.js # 正则编译器
17
+ │ ├── ImportantParser.js # Important标识解析器
18
+ │ └── ClassParser.js # 类名解析器
19
+ ├── generators/ # 生成器模块
20
+ │ ├── DynamicClassGenerator.js # 动态类生成器
21
+ │ ├── StaticClassGenerator.js # 静态类生成器 (计划中)
22
+ │ └── CSSGenerator.js # CSS生成器 (计划中)
23
+ ├── watchers/ # 监听器模块
24
+ │ ├── FileWatcher.js # 文件监听器
25
+ │ └── ConfigWatcher.js # 配置监听器
26
+ ├── writers/ # 输出模块
27
+ │ ├── FileWriter.js # 文件写入器
28
+ │ ├── UnifiedWriter.js # 统一文件写入器 (新增)
29
+ │ └── OutputManager.js # 输出管理器 (计划中)
30
+ ├── utils/ # 工具模块
31
+ │ ├── Logger.js # 日志工具
32
+ │ ├── Throttle.js # 节流工具
33
+ │ └── FileUtils.js # 文件工具
34
+ ├── index.js # 主入口文件
35
+ ├── example.js # 使用示例
36
+ └── README.md # 本文档
37
+ ```
38
+
39
+ ## 核心设计原则
40
+
41
+ ### 1. 单一职责原则
42
+ 每个模块只负责一个特定功能:
43
+ - `EventBus`: 模块间通信
44
+ - `StateManager`: 状态管理
45
+ - `ConfigManager`: 配置管理
46
+ - `CacheManager`: 缓存管理
47
+
48
+ ### 2. 依赖注入
49
+ 所有模块通过构造函数接收依赖,便于测试和扩展:
50
+ ```javascript
51
+ const classParser = new ClassParser(eventBus, regexCompiler, importantParser, userStaticClassSet);
52
+ ```
53
+
54
+ ### 3. 事件驱动架构
55
+ 使用 EventBus 进行松耦合通信:
56
+ ```javascript
57
+ eventBus.on('parser:completed', (stats) => {
58
+ console.log(`Parsed ${stats.totalCount} classes`);
59
+ });
60
+ ```
61
+
62
+ ### 4. 状态集中管理
63
+ 通过 StateManager 统一管理全局状态:
64
+ ```javascript
65
+ stateManager.updateClassListSet(classList);
66
+ stateManager.getStats();
67
+ ```
68
+
69
+ ## 模块详解
70
+
71
+ ### 核心模块 (core/)
72
+
73
+ #### EventBus.js
74
+ 事件总线,提供模块间通信机制:
75
+ - 支持普通事件和一次性事件
76
+ - 错误处理和事件统计
77
+ - 事件清理和调试功能
78
+
79
+ #### StateManager.js
80
+ 状态管理器,统一管理全局状态:
81
+ - 核心状态集合管理
82
+ - 扫描状态控制
83
+ - 状态更新和统计
84
+
85
+ #### ConfigManager.js
86
+ 配置管理器,处理配置文件加载和热重载:
87
+ - 配置文件加载和验证
88
+ - 配置热重载机制
89
+ - 配置引用更新
90
+
91
+ #### CacheManager.js
92
+ 缓存管理器,处理文件缓存和全量扫描缓存:
93
+ - 文件内容缓存(LRU策略)
94
+ - 全量扫描数据缓存
95
+ - 缓存优化和清理
96
+
97
+ #### FullScanManager.js
98
+ 全量扫描管理器,专门处理文件的全量扫描和数据管理:
99
+ - 扫描指定目录下的所有匹配文件
100
+ - 维护所有文件的样式数据集合
101
+ - 提供数据锁定机制确保数据一致性
102
+ - 支持增量数据更新和文件删除
103
+ - 为统一文件模式提供完整的数据源
104
+
105
+ ### 解析器模块 (parsers/)
106
+
107
+ #### RegexCompiler.js
108
+ 正则表达式编译器:
109
+ - 预编译正则表达式
110
+ - Important标识正则生成
111
+ - 正则表达式缓存和验证
112
+
113
+ #### ImportantParser.js
114
+ Important标识解析器:
115
+ - Important标识检测和清理
116
+ - CSS Important添加
117
+ - 批量处理和验证
118
+
119
+ #### ClassParser.js
120
+ 类名解析器:
121
+ - HTML/WXML类名提取
122
+ - 动态/静态类名分类
123
+ - 批量解析和验证
124
+
125
+ ### 生成器模块 (generators/)
126
+
127
+ #### DynamicClassGenerator.js
128
+ 动态类生成器:
129
+ - 基于配置生成动态CSS
130
+ - 单位转换处理和小数点处理优化
131
+ - 用户基础类处理
132
+ - 零值优化(如 `m-0` 生成 `margin: 0` 而不是 `margin: 0rpx`)
133
+ - Important标识支持
134
+
135
+ ### 监听器模块 (watchers/)
136
+
137
+ #### FileWatcher.js
138
+ 文件监听器:
139
+ - 基于 chokidar 的文件系统监听
140
+ - 支持多种文件类型监听
141
+ - 轮询模式支持(usePolling)
142
+ - 文件变化事件处理和防抖
143
+
144
+ #### ConfigWatcher.js
145
+ 配置文件监听器:
146
+ - 监听 `class2css.config.js` 文件变化
147
+ - 自动热重载配置(300ms防抖)
148
+ - 配置验证和变更检测
149
+ - 智能重新初始化(根据变更类型)
150
+ - Node.js模块缓存清理
151
+ - 详细的统计信息和错误处理
152
+
153
+ ### 输出模块 (writers/)
154
+
155
+ #### FileWriter.js
156
+ 文件写入器:
157
+ - 支持单文件模式(filePath)和统一文件模式(uniFile)
158
+ - 智能路径解析和目录创建
159
+ - 输出配置管理
160
+ - 批量写入支持
161
+
162
+ #### UnifiedWriter.js
163
+ 统一文件写入器(专为uniFile模式设计):
164
+ - 防抖写入机制(300ms延迟)
165
+ - 合并所有文件的样式数据
166
+ - 静态类CSS生成
167
+ - 完整CSS内容组装
168
+ - 与FullScanManager协同工作
169
+
170
+ ### 工具模块 (utils/)
171
+
172
+ #### Logger.js
173
+ 日志工具:
174
+ - 统一日志格式
175
+ - 日志级别控制
176
+ - 性能日志和统计
177
+
178
+ #### SmartThrottle.js
179
+ 智能节流器:
180
+ - 优先级任务调度
181
+ - 批量处理和队列管理
182
+ - 任务取消和清理
183
+
184
+ #### FileUtils.js
185
+ 文件工具:
186
+ - 文件操作封装
187
+ - 路径处理工具
188
+ - 批量文件操作
189
+
190
+ ## 输出模式
191
+
192
+ Class2CSS 支持两种输出模式,通过配置文件中的 `cssOutType` 字段控制:
193
+
194
+ ### 1. 单文件模式 (filePath)
195
+ ```javascript
196
+ multiFile: {
197
+ output: {
198
+ cssOutType: "filePath", // 单文件模式
199
+ path: "./output/lib",
200
+ fileType: "wxss"
201
+ }
202
+ }
203
+ ```
204
+ - 每个源文件生成对应的CSS文件
205
+ - 文件结构与源文件保持一致
206
+ - 适合组件化开发
207
+ - 文件变化只影响对应的CSS文件
208
+
209
+ ### 2. 统一文件模式 (uniFile)
210
+ ```javascript
211
+ multiFile: {
212
+ output: {
213
+ cssOutType: "uniFile", // 统一文件模式
214
+ path: "./output/lib",
215
+ fileName: "common.wxss"
216
+ }
217
+ }
218
+ ```
219
+ - 所有样式合并到一个文件中
220
+ - 任何文件变化都会重新生成完整的CSS
221
+ - 使用防抖机制优化性能(300ms延迟)
222
+ - 适合需要统一样式管理的场景
223
+
224
+ ### 输出模式特性对比
225
+
226
+ | 特性 | 单文件模式 | 统一文件模式 |
227
+ |------|------------|--------------|
228
+ | 文件数量 | 多个CSS文件 | 单个CSS文件 |
229
+ | 更新范围 | 仅更新变化的文件 | 重新生成完整CSS |
230
+ | 性能 | 增量更新,快速 | 防抖优化,适中 |
231
+ | 适用场景 | 组件化开发 | 统一样式管理 |
232
+ | 内存占用 | 较低 | 较高(维护全量数据) |
233
+
234
+ ## 使用方法
235
+
236
+ ### 基本用法
237
+
238
+ ```javascript
239
+ const Class2CSS = require('./src/index');
240
+
241
+ // 创建实例
242
+ const class2css = new Class2CSS({
243
+ configPath: './class2css.config.js',
244
+ cacheSize: 1000,
245
+ logger: {
246
+ level: 'info',
247
+ enableDebug: true
248
+ }
249
+ });
250
+
251
+ // 启动
252
+ await class2css.start();
253
+
254
+ // 处理文件变更
255
+ await class2css.handleFileChange('./example.html');
256
+
257
+ // 获取状态
258
+ const status = class2css.getStatus();
259
+ console.log(status);
260
+
261
+ // 停止
262
+ class2css.stop();
263
+ ```
264
+
265
+ ### 高级用法
266
+
267
+ ```javascript
268
+ // 获取各个模块进行直接操作
269
+ const modules = class2css.getModules();
270
+ const { logger, importantParser, classParser } = modules;
271
+
272
+ // 直接使用解析器
273
+ const htmlContent = '<div class="w-100 h-50">Hello</div>';
274
+ const parseResult = classParser.parseClassOptimized(htmlContent);
275
+
276
+ // 直接使用Important解析器
277
+ const importantResults = importantParser.batchProcessImportant(['w-100', '!w-100']);
278
+
279
+ // 设置日志级别
280
+ logger.setLevel('debug');
281
+ logger.setDebugMode(true);
282
+ ```
283
+
284
+ ### 事件监听
285
+
286
+ ```javascript
287
+ const eventBus = class2css.getEventBus();
288
+
289
+ // 监听重要事件
290
+ eventBus.on('class2css:started', () => {
291
+ console.log('Class2CSS started');
292
+ });
293
+
294
+ eventBus.on('parser:completed', (stats) => {
295
+ console.log(`Parsed ${stats.totalCount} classes`);
296
+ });
297
+
298
+ eventBus.on('generator:dynamic:completed', (stats) => {
299
+ console.log(`Generated ${stats.generatedCount} dynamic classes`);
300
+ });
301
+
302
+ eventBus.on('cache:file:updated', (filePath) => {
303
+ console.log(`File cache updated: ${filePath}`);
304
+ });
305
+ ```
306
+
307
+ ## 配置选项
308
+
309
+ ### 实例配置选项
310
+ ```javascript
311
+ const options = {
312
+ configPath: './class2css.config.js', // 配置文件路径
313
+ cacheSize: 1000, // 缓存大小
314
+ logger: {
315
+ level: 'info', // 日志级别: debug, info, warn, error
316
+ enableDebug: false, // 是否启用调试模式
317
+ enableTimestamp: true // 是否显示时间戳
318
+ }
319
+ };
320
+ ```
321
+
322
+ ### 配置文件优化 (class2css.config.js)
323
+
324
+ 新版本支持动态配置生成,通过函数式配置提高可维护性:
325
+
326
+ ```javascript
327
+ const config = {
328
+ // 基础配置...
329
+ baseClassName: {
330
+ color: { ABBR: "color" },
331
+ bg: { ABBR: "background-color" },
332
+ bcolor: { ABBR: "border-color" }
333
+ }
334
+ };
335
+
336
+ // 基础色彩配置
337
+ const baseColor = {
338
+ white: "#ffffff",
339
+ black: "#000000",
340
+ red: "#ef4444",
341
+ blue: "#3b82f6",
342
+ // ... 更多颜色
343
+ };
344
+
345
+ // 动态配置生成函数
346
+ function getConfig() {
347
+ const handleClass = config.baseClassName;
348
+ Object.values(handleClass).forEach((item) => {
349
+ if (item.ABBR) {
350
+ item = Object.assign(item, baseColor);
351
+ }
352
+ });
353
+ return config;
354
+ }
355
+
356
+ module.exports = getConfig();
357
+ ```
358
+
359
+ ### 配置特性:
360
+ - 支持颜色配置的动态合并
361
+ - 减少配置文件冗余
362
+ - 便于维护和扩展
363
+ - 支持热重载
364
+
365
+ ## CLI 工具
366
+
367
+ 项目提供了多种启动方式:
368
+
369
+ ### 1. 快速启动 (run.js)
370
+ ```bash
371
+ node run.js
372
+ ```
373
+ 直接启动工具,使用默认配置
374
+
375
+ ### 2. NPM 脚本
376
+ ```bash
377
+ npm start # 启动监听模式
378
+ npm run start:no-watch # 启动但不监听文件变化
379
+ npm run dev # 开发模式
380
+ npm test # 运行测试
381
+ npm run help # 显示帮助
382
+ npm run version # 显示版本
383
+ ```
384
+
385
+ ### 3. 命令行工具 (bin/class2css.js)
386
+ ```bash
387
+ # 全局安装后使用
388
+ class2css --help
389
+ class2css --version
390
+ class2css --config ./custom.config.js
391
+ class2css --no-watch # 不监听文件变化
392
+
393
+ # 本地使用
394
+ ./bin/class2css.js --help
395
+ ```
396
+
397
+ ### CLI 参数说明:
398
+ - `--config, -c`: 指定配置文件路径
399
+ - `--no-watch`: 禁用文件监听
400
+ - `--help, -h`: 显示帮助信息
401
+ - `--version, -v`: 显示版本信息
402
+
403
+ ## 最新功能
404
+
405
+ ### 🆕 零值优化
406
+ ```css
407
+ /* 之前 */
408
+ .m-0 { margin: 0.rpx; }
409
+
410
+ /* 现在 */
411
+ .m-0 { margin: 0; }
412
+ ```
413
+
414
+ ### 🆕 统一文件模式
415
+ - 支持将所有样式合并到单个文件
416
+ - 防抖写入优化性能
417
+ - 全量数据管理确保完整性
418
+
419
+ ### 🆕 配置文件优化
420
+ - 函数式配置生成
421
+ - 动态颜色配置合并
422
+ - 减少配置冗余
423
+
424
+ ### 🆕 配置文件热重载
425
+ - 自动监听配置文件变化
426
+ - 智能配置验证和应用
427
+ - 防抖机制优化性能
428
+ - 支持增量更新和完全重载
429
+
430
+ ### 🆕 完整的模块化架构
431
+ - 16个独立模块
432
+ - 事件驱动设计
433
+ - 依赖注入支持
434
+
435
+ ## 优势
436
+
437
+ ### 1. 可维护性
438
+ - 模块化设计,职责清晰
439
+ - 代码结构清晰,易于理解
440
+ - 便于定位和修复问题
441
+
442
+ ### 2. 可测试性
443
+ - 每个模块可独立测试
444
+ - 依赖注入便于模拟
445
+ - 事件驱动便于测试
446
+
447
+ ### 3. 可扩展性
448
+ - 易于添加新功能
449
+ - 插件化架构
450
+ - 配置驱动
451
+
452
+ ### 4. 性能优化
453
+ - 智能缓存机制
454
+ - 优先级任务调度
455
+ - 内存管理优化
456
+
457
+ ## 迁移指南
458
+
459
+ ### 从原版本迁移到模块化版本
460
+
461
+ #### 1. 基本迁移
462
+ ```javascript
463
+ // 旧版本
464
+ const originalClass2CSS = require('./class2css.js');
465
+
466
+ // 新版本
467
+ const Class2CSS = require('./src/index');
468
+ const class2css = new Class2CSS({ configPath: './class2css.config.js' });
469
+ await class2css.start();
470
+ ```
471
+
472
+ #### 2. 配置文件升级
473
+ 配置文件基本格式保持兼容,但建议使用新的函数式配置:
474
+ ```javascript
475
+ // 旧配置:静态配置
476
+ module.exports = {
477
+ baseClassName: {
478
+ color: { ABBR: "color", white: "#fff", black: "#000" }
479
+ }
480
+ };
481
+
482
+ // 新配置:动态配置
483
+ const config = { /* 基础配置 */ };
484
+ const baseColor = { /* 颜色配置 */ };
485
+ function getConfig() { /* 动态合并逻辑 */ }
486
+ module.exports = getConfig();
487
+ ```
488
+
489
+ #### 3. 输出模式选择
490
+ - 保持现有行为:使用 `cssOutType: "filePath"`
491
+ - 统一样式管理:使用 `cssOutType: "uniFile"`
492
+
493
+ #### 4. CLI工具升级
494
+ ```bash
495
+ # 旧版本
496
+ node class2css.js
497
+
498
+ # 新版本
499
+ node run.js # 快速启动
500
+ npm start # NPM脚本
501
+ ./bin/class2css.js --help # CLI工具
502
+ ```
503
+
504
+ ### 兼容性说明
505
+ - ✅ 配置文件格式完全兼容
506
+ - ✅ 生成的CSS格式兼容(除零值优化外)
507
+ - ✅ API接口向前兼容
508
+ - ⚠️ 零值处理有所改进(`m-0` 现在生成 `margin: 0` 而不是 `margin: 0.rpx`)
509
+
510
+ ## 开发指南
511
+
512
+ ### 添加新模块
513
+
514
+ 1. 在相应目录下创建新模块文件
515
+ 2. 实现模块接口
516
+ 3. 在 `index.js` 中集成新模块
517
+ 4. 添加相应的事件处理
518
+
519
+ ### 测试模块
520
+
521
+ ```javascript
522
+ const EventBus = require('./core/EventBus');
523
+ const YourModule = require('./your/YourModule');
524
+
525
+ const eventBus = new EventBus();
526
+ const yourModule = new YourModule(eventBus, dependencies);
527
+
528
+ // 测试模块功能
529
+ // 监听相关事件
530
+ ```
531
+
532
+ ## 版本历史
533
+
534
+ ### v2.0.0 (2025-01-30)
535
+ - 🚀 **重大更新**:完全模块化架构重构
536
+ - ✨ **新功能**:统一文件模式 (uniFile)
537
+ - ✨ **新功能**:零值优化处理
538
+ - ✨ **新功能**:CLI工具支持
539
+ - ✨ **新功能**:函数式配置生成
540
+ - 🛠️ **改进**:完整的事件驱动架构
541
+ - 🛠️ **改进**:智能缓存和性能优化
542
+ - 🛠️ **改进**:全量扫描管理器
543
+ - 🛠️ **改进**:防抖写入机制
544
+ - 📦 **架构**:15个独立模块
545
+ - 📦 **架构**:依赖注入设计
546
+ - 📦 **架构**:状态集中管理
547
+
548
+ ### v1.x
549
+ - 单文件架构
550
+ - 基础CSS生成功能
551
+ - 文件监听和热重载
552
+
553
+ ## 贡献指南
554
+
555
+ 欢迎贡献代码!请遵循以下步骤:
556
+
557
+ 1. Fork 项目
558
+ 2. 创建功能分支:`git checkout -b feature/new-feature`
559
+ 3. 提交更改:`git commit -am 'Add new feature'`
560
+ 4. 推送分支:`git push origin feature/new-feature`
561
+ 5. 创建 Pull Request
562
+
563
+ ### 开发规范
564
+ - 遵循 ESLint 规则
565
+ - 编写单元测试
566
+ - 更新相关文档
567
+ - 保持向后兼容性
568
+
569
+ ## 许可证
570
+
571
+ MIT License