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/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
# 贡献指南
|
|
2
|
+
|
|
3
|
+
感谢您对 Class2CSS 项目的关注!我们欢迎所有形式的贡献,包括但不限于:
|
|
4
|
+
|
|
5
|
+
- 🐛 报告 Bug
|
|
6
|
+
- 💡 提出新功能建议
|
|
7
|
+
- 📝 改进文档
|
|
8
|
+
- 🔧 提交代码修复
|
|
9
|
+
- ✨ 实现新功能
|
|
10
|
+
|
|
11
|
+
## 📋 目录
|
|
12
|
+
|
|
13
|
+
- [行为准则](#行为准则)
|
|
14
|
+
- [如何贡献](#如何贡献)
|
|
15
|
+
- [开发流程](#开发流程)
|
|
16
|
+
- [代码规范](#代码规范)
|
|
17
|
+
- [提交规范](#提交规范)
|
|
18
|
+
- [测试要求](#测试要求)
|
|
19
|
+
- [文档要求](#文档要求)
|
|
20
|
+
|
|
21
|
+
## 行为准则
|
|
22
|
+
|
|
23
|
+
### 我们的承诺
|
|
24
|
+
|
|
25
|
+
为了营造一个开放和友好的环境,我们承诺:
|
|
26
|
+
|
|
27
|
+
- 使用友好和包容的语言
|
|
28
|
+
- 尊重不同的观点和经验
|
|
29
|
+
- 优雅地接受建设性批评
|
|
30
|
+
- 关注对社区最有利的事情
|
|
31
|
+
- 对其他社区成员表示同理心
|
|
32
|
+
|
|
33
|
+
### 不可接受的行为
|
|
34
|
+
|
|
35
|
+
- 使用性化的语言或图像
|
|
36
|
+
- 挑衅、侮辱或贬损的评论
|
|
37
|
+
- 公开或私下骚扰
|
|
38
|
+
- 未经许可发布他人的私人信息
|
|
39
|
+
- 其他在专业环境中不适当的行为
|
|
40
|
+
|
|
41
|
+
## 如何贡献
|
|
42
|
+
|
|
43
|
+
### 报告 Bug
|
|
44
|
+
|
|
45
|
+
如果您发现了 Bug,请通过 [GitHub Issues](https://github.com/wnagchi/css2class/issues) 提交报告。
|
|
46
|
+
|
|
47
|
+
**Bug 报告应包含:**
|
|
48
|
+
|
|
49
|
+
1. **清晰的标题** - 简洁描述问题
|
|
50
|
+
2. **环境信息**
|
|
51
|
+
- Node.js 版本
|
|
52
|
+
- 操作系统
|
|
53
|
+
- Class2CSS 版本
|
|
54
|
+
3. **重现步骤** - 详细的步骤说明
|
|
55
|
+
4. **期望行为** - 您期望发生什么
|
|
56
|
+
5. **实际行为** - 实际发生了什么
|
|
57
|
+
6. **配置文件** - 相关的配置代码
|
|
58
|
+
7. **错误日志** - 完整的错误信息
|
|
59
|
+
8. **截图** - 如果适用
|
|
60
|
+
|
|
61
|
+
**Bug 报告模板:**
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
## Bug 描述
|
|
65
|
+
简要描述问题...
|
|
66
|
+
|
|
67
|
+
## 环境信息
|
|
68
|
+
- Node.js 版本: v16.14.0
|
|
69
|
+
- 操作系统: Windows 10
|
|
70
|
+
- Class2CSS 版本: 2.0.0
|
|
71
|
+
|
|
72
|
+
## 重现步骤
|
|
73
|
+
1. 创建配置文件...
|
|
74
|
+
2. 运行命令...
|
|
75
|
+
3. 观察到错误...
|
|
76
|
+
|
|
77
|
+
## 期望行为
|
|
78
|
+
应该生成正确的 CSS...
|
|
79
|
+
|
|
80
|
+
## 实际行为
|
|
81
|
+
生成了错误的 CSS...
|
|
82
|
+
|
|
83
|
+
## 配置文件
|
|
84
|
+
\`\`\`javascript
|
|
85
|
+
module.exports = {
|
|
86
|
+
// 您的配置
|
|
87
|
+
};
|
|
88
|
+
\`\`\`
|
|
89
|
+
|
|
90
|
+
## 错误日志
|
|
91
|
+
\`\`\`
|
|
92
|
+
错误信息...
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
## 截图
|
|
96
|
+
如果适用,添加截图帮助说明问题
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 提出功能建议
|
|
100
|
+
|
|
101
|
+
我们欢迎新功能建议!请通过 [GitHub Issues](https://github.com/wnagchi/css2class/issues) 提交。
|
|
102
|
+
|
|
103
|
+
**功能建议应包含:**
|
|
104
|
+
|
|
105
|
+
1. **功能描述** - 清晰描述建议的功能
|
|
106
|
+
2. **使用场景** - 为什么需要这个功能
|
|
107
|
+
3. **预期效果** - 功能应该如何工作
|
|
108
|
+
4. **替代方案** - 您考虑过的其他方案
|
|
109
|
+
5. **示例代码** - 如果可能,提供示例
|
|
110
|
+
|
|
111
|
+
**功能建议模板:**
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
## 功能描述
|
|
115
|
+
建议添加...功能
|
|
116
|
+
|
|
117
|
+
## 使用场景
|
|
118
|
+
在...情况下,需要...
|
|
119
|
+
|
|
120
|
+
## 预期效果
|
|
121
|
+
用户可以通过...来...
|
|
122
|
+
|
|
123
|
+
## 替代方案
|
|
124
|
+
目前可以通过...实现,但是...
|
|
125
|
+
|
|
126
|
+
## 示例代码
|
|
127
|
+
\`\`\`javascript
|
|
128
|
+
// 期望的使用方式
|
|
129
|
+
\`\`\`
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 改进文档
|
|
133
|
+
|
|
134
|
+
文档改进同样重要!如果您发现:
|
|
135
|
+
|
|
136
|
+
- 文档中的错误或不清楚的地方
|
|
137
|
+
- 缺失的文档
|
|
138
|
+
- 可以改进的示例
|
|
139
|
+
|
|
140
|
+
请直接提交 Pull Request 或创建 Issue。
|
|
141
|
+
|
|
142
|
+
## 开发流程
|
|
143
|
+
|
|
144
|
+
### 1. Fork 项目
|
|
145
|
+
|
|
146
|
+
点击 GitHub 页面右上角的 "Fork" 按钮,将项目 Fork 到您的账号下。
|
|
147
|
+
|
|
148
|
+
### 2. 克隆仓库
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
git clone https://github.com/YOUR_USERNAME/css2class.git
|
|
152
|
+
cd css2class
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 3. 创建分支
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# 创建功能分支
|
|
159
|
+
git checkout -b feature/your-feature-name
|
|
160
|
+
|
|
161
|
+
# 或创建修复分支
|
|
162
|
+
git checkout -b fix/your-bug-fix
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**分支命名规范:**
|
|
166
|
+
|
|
167
|
+
- `feature/` - 新功能
|
|
168
|
+
- `fix/` - Bug 修复
|
|
169
|
+
- `docs/` - 文档更新
|
|
170
|
+
- `refactor/` - 代码重构
|
|
171
|
+
- `test/` - 测试相关
|
|
172
|
+
- `chore/` - 构建/工具相关
|
|
173
|
+
|
|
174
|
+
### 4. 安装依赖
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npm install
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 5. 进行开发
|
|
181
|
+
|
|
182
|
+
在您的分支上进行开发,确保:
|
|
183
|
+
|
|
184
|
+
- 代码符合项目规范
|
|
185
|
+
- 添加必要的测试
|
|
186
|
+
- 更新相关文档
|
|
187
|
+
- 提交信息清晰明确
|
|
188
|
+
|
|
189
|
+
### 6. 运行测试
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# 运行测试
|
|
193
|
+
npm test
|
|
194
|
+
|
|
195
|
+
# 运行 linter
|
|
196
|
+
npm run lint
|
|
197
|
+
|
|
198
|
+
# 格式化代码
|
|
199
|
+
npm run format
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 7. 提交更改
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
git add .
|
|
206
|
+
git commit -m "feat: 添加新功能描述"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 8. 推送到 GitHub
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
git push origin feature/your-feature-name
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 9. 创建 Pull Request
|
|
216
|
+
|
|
217
|
+
1. 访问您 Fork 的仓库页面
|
|
218
|
+
2. 点击 "New Pull Request"
|
|
219
|
+
3. 填写 PR 描述
|
|
220
|
+
4. 等待审核
|
|
221
|
+
|
|
222
|
+
## 代码规范
|
|
223
|
+
|
|
224
|
+
### JavaScript 规范
|
|
225
|
+
|
|
226
|
+
项目使用 ESLint 和 Prettier 进行代码规范检查。
|
|
227
|
+
|
|
228
|
+
**基本规则:**
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
// ✅ 推荐
|
|
232
|
+
class ConfigManager {
|
|
233
|
+
constructor(eventBus) {
|
|
234
|
+
this.eventBus = eventBus;
|
|
235
|
+
this.config = null;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
loadConfig(configPath) {
|
|
239
|
+
// 实现...
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ❌ 避免
|
|
244
|
+
class configManager {
|
|
245
|
+
constructor(eventBus) {
|
|
246
|
+
this.eventBus = eventBus
|
|
247
|
+
this.config = null
|
|
248
|
+
}
|
|
249
|
+
loadConfig(configPath) {
|
|
250
|
+
// 实现...
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**代码风格:**
|
|
256
|
+
|
|
257
|
+
- 使用 2 空格缩进
|
|
258
|
+
- 使用单引号
|
|
259
|
+
- 语句末尾添加分号
|
|
260
|
+
- 类名使用 PascalCase
|
|
261
|
+
- 函数和变量使用 camelCase
|
|
262
|
+
- 常量使用 UPPER_SNAKE_CASE
|
|
263
|
+
- 每行最大长度 100 字符
|
|
264
|
+
|
|
265
|
+
### 注释规范
|
|
266
|
+
|
|
267
|
+
```javascript
|
|
268
|
+
/**
|
|
269
|
+
* 配置管理器
|
|
270
|
+
* 负责加载、验证和管理配置文件
|
|
271
|
+
*/
|
|
272
|
+
class ConfigManager {
|
|
273
|
+
/**
|
|
274
|
+
* 加载配置文件
|
|
275
|
+
* @param {string} configPath - 配置文件路径
|
|
276
|
+
* @returns {Object} 配置对象
|
|
277
|
+
* @throws {Error} 配置文件不存在或格式错误
|
|
278
|
+
*/
|
|
279
|
+
loadConfig(configPath) {
|
|
280
|
+
// 实现...
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 模块组织
|
|
286
|
+
|
|
287
|
+
```javascript
|
|
288
|
+
// 1. Node.js 内置模块
|
|
289
|
+
const path = require('path');
|
|
290
|
+
const fs = require('fs');
|
|
291
|
+
|
|
292
|
+
// 2. 第三方模块
|
|
293
|
+
const chokidar = require('chokidar');
|
|
294
|
+
|
|
295
|
+
// 3. 项目内部模块
|
|
296
|
+
const EventBus = require('./core/EventBus');
|
|
297
|
+
const Logger = require('./utils/Logger');
|
|
298
|
+
|
|
299
|
+
// 4. 常量定义
|
|
300
|
+
const DEFAULT_CONFIG = {
|
|
301
|
+
// ...
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// 5. 类或函数定义
|
|
305
|
+
class YourClass {
|
|
306
|
+
// ...
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// 6. 导出
|
|
310
|
+
module.exports = YourClass;
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## 提交规范
|
|
314
|
+
|
|
315
|
+
### Commit Message 格式
|
|
316
|
+
|
|
317
|
+
使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
<type>(<scope>): <subject>
|
|
321
|
+
|
|
322
|
+
<body>
|
|
323
|
+
|
|
324
|
+
<footer>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Type 类型:**
|
|
328
|
+
|
|
329
|
+
- `feat` - 新功能
|
|
330
|
+
- `fix` - Bug 修复
|
|
331
|
+
- `docs` - 文档更新
|
|
332
|
+
- `style` - 代码格式(不影响代码运行)
|
|
333
|
+
- `refactor` - 重构(既不是新功能也不是修复)
|
|
334
|
+
- `perf` - 性能优化
|
|
335
|
+
- `test` - 测试相关
|
|
336
|
+
- `chore` - 构建过程或辅助工具的变动
|
|
337
|
+
|
|
338
|
+
**Scope 范围(可选):**
|
|
339
|
+
|
|
340
|
+
- `core` - 核心模块
|
|
341
|
+
- `parser` - 解析器
|
|
342
|
+
- `generator` - 生成器
|
|
343
|
+
- `watcher` - 监听器
|
|
344
|
+
- `config` - 配置相关
|
|
345
|
+
- `docs` - 文档
|
|
346
|
+
- `deps` - 依赖
|
|
347
|
+
|
|
348
|
+
**示例:**
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
# 新功能
|
|
352
|
+
git commit -m "feat(parser): 添加 CSS 变量支持"
|
|
353
|
+
|
|
354
|
+
# Bug 修复
|
|
355
|
+
git commit -m "fix(generator): 修复单位转换精度问题"
|
|
356
|
+
|
|
357
|
+
# 文档更新
|
|
358
|
+
git commit -m "docs: 更新配置文档示例"
|
|
359
|
+
|
|
360
|
+
# 重构
|
|
361
|
+
git commit -m "refactor(core): 优化缓存管理器性能"
|
|
362
|
+
|
|
363
|
+
# 性能优化
|
|
364
|
+
git commit -m "perf(parser): 优化正则表达式编译"
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**详细示例:**
|
|
368
|
+
|
|
369
|
+
```
|
|
370
|
+
feat(parser): 添加 CSS 变量支持
|
|
371
|
+
|
|
372
|
+
- 实现 CSS 变量解析逻辑
|
|
373
|
+
- 添加变量替换功能
|
|
374
|
+
- 更新相关测试用例
|
|
375
|
+
|
|
376
|
+
Closes #123
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## 测试要求
|
|
380
|
+
|
|
381
|
+
### 单元测试
|
|
382
|
+
|
|
383
|
+
所有新功能和 Bug 修复都应该包含相应的测试。
|
|
384
|
+
|
|
385
|
+
```javascript
|
|
386
|
+
// tests/unit/ConfigManager.test.js
|
|
387
|
+
const ConfigManager = require('../../src/core/ConfigManager');
|
|
388
|
+
const EventBus = require('../../src/core/EventBus');
|
|
389
|
+
|
|
390
|
+
describe('ConfigManager', () => {
|
|
391
|
+
let eventBus;
|
|
392
|
+
let configManager;
|
|
393
|
+
|
|
394
|
+
beforeEach(() => {
|
|
395
|
+
eventBus = new EventBus();
|
|
396
|
+
configManager = new ConfigManager(eventBus);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
describe('loadConfig', () => {
|
|
400
|
+
it('should load valid config file', () => {
|
|
401
|
+
const config = configManager.loadConfig('./test-config.js');
|
|
402
|
+
expect(config).toBeDefined();
|
|
403
|
+
expect(config.system).toBeDefined();
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
it('should throw error for invalid config', () => {
|
|
407
|
+
expect(() => {
|
|
408
|
+
configManager.loadConfig('./invalid-config.js');
|
|
409
|
+
}).toThrow();
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### 测试覆盖率
|
|
416
|
+
|
|
417
|
+
- 新代码的测试覆盖率应达到 80% 以上
|
|
418
|
+
- 核心模块的覆盖率应达到 90% 以上
|
|
419
|
+
|
|
420
|
+
### 运行测试
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
# 运行所有测试
|
|
424
|
+
npm test
|
|
425
|
+
|
|
426
|
+
# 运行特定测试文件
|
|
427
|
+
npm test -- ConfigManager.test.js
|
|
428
|
+
|
|
429
|
+
# 查看覆盖率报告
|
|
430
|
+
npm run test:coverage
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
## 文档要求
|
|
434
|
+
|
|
435
|
+
### 代码文档
|
|
436
|
+
|
|
437
|
+
- 所有公共 API 必须有 JSDoc 注释
|
|
438
|
+
- 复杂逻辑需要添加解释性注释
|
|
439
|
+
- 示例代码应该可运行
|
|
440
|
+
|
|
441
|
+
### README 更新
|
|
442
|
+
|
|
443
|
+
如果您的更改影响了使用方式,请更新 README.md:
|
|
444
|
+
|
|
445
|
+
- 添加新功能说明
|
|
446
|
+
- 更新使用示例
|
|
447
|
+
- 更新配置选项
|
|
448
|
+
|
|
449
|
+
### CHANGELOG 更新
|
|
450
|
+
|
|
451
|
+
重要更改需要在 CHANGELOG.md 中记录:
|
|
452
|
+
|
|
453
|
+
```markdown
|
|
454
|
+
## [Unreleased]
|
|
455
|
+
|
|
456
|
+
### Added
|
|
457
|
+
- 新功能描述
|
|
458
|
+
|
|
459
|
+
### Changed
|
|
460
|
+
- 变更说明
|
|
461
|
+
|
|
462
|
+
### Fixed
|
|
463
|
+
- 修复说明
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
## Pull Request 指南
|
|
467
|
+
|
|
468
|
+
### PR 描述模板
|
|
469
|
+
|
|
470
|
+
```markdown
|
|
471
|
+
## 变更类型
|
|
472
|
+
- [ ] Bug 修复
|
|
473
|
+
- [ ] 新功能
|
|
474
|
+
- [ ] 文档更新
|
|
475
|
+
- [ ] 代码重构
|
|
476
|
+
- [ ] 性能优化
|
|
477
|
+
|
|
478
|
+
## 变更说明
|
|
479
|
+
简要描述此 PR 的目的和实现方式...
|
|
480
|
+
|
|
481
|
+
## 相关 Issue
|
|
482
|
+
Closes #123
|
|
483
|
+
|
|
484
|
+
## 测试
|
|
485
|
+
- [ ] 添加了单元测试
|
|
486
|
+
- [ ] 所有测试通过
|
|
487
|
+
- [ ] 手动测试通过
|
|
488
|
+
|
|
489
|
+
## 检查清单
|
|
490
|
+
- [ ] 代码符合项目规范
|
|
491
|
+
- [ ] 更新了相关文档
|
|
492
|
+
- [ ] 添加了必要的注释
|
|
493
|
+
- [ ] 没有引入新的警告
|
|
494
|
+
- [ ] 向后兼容
|
|
495
|
+
|
|
496
|
+
## 截图(如适用)
|
|
497
|
+
添加截图帮助说明变更...
|
|
498
|
+
|
|
499
|
+
## 其他说明
|
|
500
|
+
其他需要说明的内容...
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### PR 审核流程
|
|
504
|
+
|
|
505
|
+
1. **自动检查** - CI/CD 自动运行测试和 linter
|
|
506
|
+
2. **代码审核** - 维护者审核代码质量
|
|
507
|
+
3. **讨论修改** - 根据反馈进行修改
|
|
508
|
+
4. **合并** - 审核通过后合并到主分支
|
|
509
|
+
|
|
510
|
+
### PR 注意事项
|
|
511
|
+
|
|
512
|
+
- 保持 PR 专注于单一目的
|
|
513
|
+
- 确保 PR 描述清晰完整
|
|
514
|
+
- 及时响应审核意见
|
|
515
|
+
- 保持提交历史清晰
|
|
516
|
+
- 解决所有冲突
|
|
517
|
+
|
|
518
|
+
## 开发环境设置
|
|
519
|
+
|
|
520
|
+
### 推荐工具
|
|
521
|
+
|
|
522
|
+
- **编辑器**: VS Code
|
|
523
|
+
- **Node.js**: >= 14.0.0
|
|
524
|
+
- **Git**: 最新版本
|
|
525
|
+
|
|
526
|
+
### VS Code 扩展
|
|
527
|
+
|
|
528
|
+
推荐安装以下扩展:
|
|
529
|
+
|
|
530
|
+
- ESLint
|
|
531
|
+
- Prettier
|
|
532
|
+
- GitLens
|
|
533
|
+
- JavaScript (ES6) code snippets
|
|
534
|
+
|
|
535
|
+
### VS Code 设置
|
|
536
|
+
|
|
537
|
+
```json
|
|
538
|
+
{
|
|
539
|
+
"editor.formatOnSave": true,
|
|
540
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
541
|
+
"eslint.validate": ["javascript"],
|
|
542
|
+
"editor.codeActionsOnSave": {
|
|
543
|
+
"source.fixAll.eslint": true
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
## 获取帮助
|
|
549
|
+
|
|
550
|
+
如果您在贡献过程中遇到问题:
|
|
551
|
+
|
|
552
|
+
1. **查看文档** - 阅读项目文档和 README
|
|
553
|
+
2. **搜索 Issues** - 查看是否有类似问题
|
|
554
|
+
3. **提问** - 在 Issue 中提问
|
|
555
|
+
4. **联系维护者** - 通过 GitHub 联系
|
|
556
|
+
|
|
557
|
+
## 社区
|
|
558
|
+
|
|
559
|
+
- **GitHub Issues**: [问题讨论](https://github.com/wnagchi/css2class/issues)
|
|
560
|
+
- **Pull Requests**: [代码贡献](https://github.com/wnagchi/css2class/pulls)
|
|
561
|
+
|
|
562
|
+
## 许可证
|
|
563
|
+
|
|
564
|
+
通过贡献代码,您同意您的贡献将在 [MIT License](LICENSE) 下发布。
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
568
|
+
再次感谢您的贡献!🎉
|
|
569
|
+
|
|
570
|
+
> 💡 如有任何疑问,欢迎随时提出 Issue 或联系维护者。
|
|
571
|
+
|