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.
- package/API.md +1143 -0
- package/CHANGELOG.md +291 -0
- package/CONFIG.md +1096 -0
- package/CONTRIBUTING.md +571 -0
- package/MIGRATION.md +402 -0
- package/README.md +634 -0
- package/bin/class2css.js +380 -0
- package/class2css.config.js +124 -0
- package/common.css +3 -0
- package/configs/colors.config.js +62 -0
- package/configs/layout.config.js +110 -0
- package/configs/spacing.config.js +37 -0
- package/configs/typography.config.js +41 -0
- package/docs/.vitepress/config.mjs +65 -0
- package/docs/.vitepress/theme/custom.css +74 -0
- package/docs/.vitepress/theme/index.js +7 -0
- package/docs/guide/cli.md +97 -0
- package/docs/guide/concepts.md +63 -0
- package/docs/guide/config-template.md +365 -0
- package/docs/guide/config.md +275 -0
- package/docs/guide/faq.md +202 -0
- package/docs/guide/getting-started.md +83 -0
- package/docs/guide/important-and-static.md +67 -0
- package/docs/guide/incremental.md +162 -0
- package/docs/guide/rules-reference.md +354 -0
- package/docs/guide/units.md +57 -0
- package/docs/index.md +68 -0
- package/package.json +49 -0
- package/run.js +90 -0
- package/src/README.md +571 -0
- package/src/core/CacheManager.js +650 -0
- package/src/core/CompatibilityAdapter.js +264 -0
- package/src/core/ConfigManager.js +431 -0
- package/src/core/ConfigValidator.js +350 -0
- package/src/core/EventBus.js +77 -0
- package/src/core/FullScanManager.js +430 -0
- package/src/core/StateManager.js +631 -0
- package/src/docs/DocsServer.js +179 -0
- package/src/example.js +106 -0
- package/src/generators/DynamicClassGenerator.js +674 -0
- package/src/index.js +1046 -0
- package/src/parsers/ClassParser.js +572 -0
- package/src/parsers/ImportantParser.js +279 -0
- package/src/parsers/RegexCompiler.js +200 -0
- package/src/utils/ClassChangeTracker.js +366 -0
- package/src/utils/ConfigDiagnostics.js +673 -0
- package/src/utils/CssFormatter.js +261 -0
- package/src/utils/FileUtils.js +230 -0
- package/src/utils/Logger.js +150 -0
- package/src/utils/Throttle.js +172 -0
- package/src/utils/UnitProcessor.js +334 -0
- package/src/utils/WxssClassExtractor.js +137 -0
- package/src/watchers/ConfigWatcher.js +413 -0
- package/src/watchers/FileWatcher.js +133 -0
- package/src/writers/FileWriter.js +302 -0
- package/src/writers/UnifiedWriter.js +370 -0
- 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
|
+
> 💡 迁移建议:先在测试环境验证,确认无误后再应用到生产环境。
|