mm_config 2.1.6 → 2.1.8

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/README.md CHANGED
@@ -1,284 +1,382 @@
1
- # mm_config
2
-
3
- 超级美眉配置帮助类,动态同步文件修改配置。
4
-
5
- ## 功能特点
6
-
7
- - 支持配置文件的动态读取和修改
8
- - 修改配置后自动同步保存到JSON文件
9
- - 使用Proxy实现属性监听,操作方便
10
- - 支持同步和异步API操作
11
- - 支持配置修改防抖功能,减少频繁保存
12
- - 内置错误处理机制,提高稳定性
13
- - 支持JSON5格式配置文件
14
- - 简洁命名,遵循单字优先原则
15
- - 内置缓存管理,避免重复创建配置实例
16
-
17
- ## 安装
18
-
19
- ```bash
20
- npm install mm_config
21
- ```
22
-
23
- ## API说明
24
-
25
- ### 导入模块
26
-
27
- ```javascript
28
- // 导入配置类
29
- const { Config, create, createAsync, clear, clearAll } = require('mm_config');
30
- ```
31
-
32
- ### 配置初始化
33
-
34
- #### 同步API
35
-
36
- ```javascript
37
- /**
38
- * 创建同步配置
39
- * @param {String} file - 配置文件路径
40
- * @param {Object} config - 配置对象,可选
41
- * @param {Object} options - 配置选项,可选
42
- * @param {Number} options.debounce_time - 防抖时间(ms),默认0
43
- * @param {Boolean} options.pretty - 是否美化输出,默认true
44
- * @param {String} options.format - 格式(json/json5),默认json
45
- * @returns {Proxy} 返回配置代理对象
46
- */
47
- const config = create(file, config, options);
48
- ```
49
-
50
- #### 异步API
51
-
52
- ```javascript
53
- /**
54
- * 创建异步配置
55
- * @param {String} file - 配置文件路径
56
- * @param {Object} config - 配置对象,可选
57
- * @param {Object} options - 配置选项,可选
58
- * @returns {Promise<Proxy>} 返回配置代理对象的Promise
59
- */
60
- const config = await createAsync(file, config, options);
61
- ```
62
-
63
- #### 缓存管理API
64
-
65
- ```javascript
66
- /**
67
- * 清理指定文件配置缓存
68
- * @param {String} file - 配置文件路径
69
- */
70
- clear(file);
71
-
72
- /**
73
- * 清理所有配置缓存
74
- */
75
- clearAll();
76
- ```
77
-
78
- #### 代理对象特殊方法
79
-
80
- 通过代理对象可以访问以下特殊方法:
81
-
82
- - `_saveSync()`: 同步保存配置到文件
83
- - `_saveAsync()`: 异步保存配置到文件
84
- - `_raw`: 获取原始配置对象
85
-
86
- ## 使用示例
87
-
88
- ### 1. 基本同步配置
89
-
90
- ```javascript
91
- const { create } = require('mm_config');
92
-
93
- // 创建配置并指定保存路径
94
- const config = create("./config.json", {
95
- name: "demo",
96
- state: 1
97
- });
98
-
99
- // 修改配置会自动保存到文件
100
- config.name = "test";
101
- config.sort = 2;
102
-
103
- // 显式调用保存
104
- config._saveSync();
105
-
106
- // 读取现有配置
107
- const existingConfig = create("./config.json");
108
- ```
109
-
110
- ### 2. 使用异步API
111
-
112
- ```javascript
113
- const { createAsync } = require('mm_config');
114
-
115
- async function setupConfig() {
116
- // 创建异步配置
117
- const config = await createAsync("./async_config.json", {
118
- name: "asyncDemo",
119
- version: "1.0.0"
120
- });
121
-
122
- // 修改配置会异步自动保存
123
- config.timestamp = new Date().toISOString();
124
-
125
- // 显式调用异步保存
126
- await config._saveAsync();
127
-
128
- return config;
129
- }
130
- ```
131
-
132
- ### 3. 使用防抖功能
133
-
134
- ```javascript
135
- const { create } = require('mm_config');
136
-
137
- // 创建带防抖的配置(500ms延迟保存)
138
- const config = create("./debounce_config.json", {
139
- name: "debounceDemo"
140
- }, {
141
- debounce_time: 500 // 500ms防抖时间
142
- });
143
-
144
- // 快速多次修改,只会在最后一次修改后500ms保存一次
145
- for (let i = 0; i < 10; i++) {
146
- config.counter = i;
147
- config.timestamp = new Date().toISOString();
148
- }
149
- ```
150
-
151
- ### 4. 使用JSON5格式
152
-
153
- ```javascript
154
- const { create } = require('mm_config');
155
-
156
- // 创建支持JSON5格式的配置
157
- const config = create("./config.json5", null, {
158
- format: 'json5'
159
- });
160
-
161
- // JSON5格式支持注释、尾随逗号等特性
162
- config.description = "This supports JSON5 format";
163
- ```
164
-
165
- ### 5. 直接使用Config类
166
-
167
- ```javascript
168
- const { Config } = require('mm_config');
169
-
170
- // 创建配置实例
171
- const cfg = new Config({
172
- name: "directDemo"
173
- }, "./direct_config.json");
174
-
175
- // 获取代理对象
176
- const config = cfg.getProxy();
177
-
178
- // 使用配置
179
- config.version = "1.0.0";
180
-
181
- // 手动调用保存方法
182
- cfg.saveSync();
183
- await cfg.saveAsync();
184
- ```
185
-
186
- ### 6. 使用配置操作方法
187
-
188
- ```javascript
189
- const { Config } = require('mm_config');
190
-
191
- const cfg = new Config({}, "./methods_config.json");
192
-
193
- // 设置配置值
194
- await cfg.set("name", "test");
195
-
196
- // 获取配置值
197
- const name = await cfg.get("name");
198
-
199
- // 检查配置是否存在
200
- const hasName = await cfg.has("name");
201
-
202
- // 删除配置项
203
- await cfg.del("name");
204
-
205
- // 获取所有键
206
- const keys = await cfg.keys();
207
- ```
208
-
209
- ### 7. 缓存管理功能
210
-
211
- ```javascript
212
- const { create, clear, clearAll } = require('mm_config');
213
-
214
- // 创建配置实例
215
- const config1 = create("./cache1.json", { test: "cache1" });
216
- const config2 = create("./cache2.json", { test: "cache2" });
217
-
218
- // 清理指定文件缓存
219
- clear("./cache1.json");
220
-
221
- // 重新创建会生成新实例
222
- const config1New = create("./cache1.json", { test: "cache1_new" });
223
-
224
- // 清理所有缓存
225
- clearAll();
226
-
227
- // 所有配置都会重新创建
228
- const config2New = create("./cache2.json", { test: "cache2_new" });
229
- ```
230
-
231
- ## 配置选项
232
-
233
- 创建配置时可提供以下选项:
234
-
235
- | 选项 | 类型 | 默认值 | 描述 |
236
- |------|------|--------|------|
237
- | debounce_time | Number | 0 | 防抖时间(毫秒),设置后多次修改会延迟保存 |
238
- | pretty | Boolean | true | 是否美化JSON输出,设为false可生成压缩的JSON |
239
- | format | String | 'json' | 配置文件格式,可选'json'或'json5' |
240
-
241
- ## 注意事项
242
-
243
- 1. 配置文件会自动创建和同步
244
- 2. 修改配置对象的属性会自动保存到文件
245
- 3. 确保有文件的写入权限
246
- 4. 使用防抖功能可以减少频繁的文件IO操作
247
- 5. 异步API适合在非阻塞环境中使用
248
- 6. 当使用JSON5格式时,保存仍使用标准JSON格式,但可读取JSON5格式的文件
249
- 7. 配置实例会被缓存,相同文件路径会返回同一实例,使用clear/clearAll可清理缓存
250
-
251
- ## 依赖
252
-
253
- - json5: 用于解析JSON5格式
254
- - mm_expand: 提供文件操作扩展
255
-
256
- ## 命名规范
257
-
258
- 本模块遵循简洁命名原则:
259
- - 类名:`Config`(单字优先)
260
- - 方法名:`get()`、`set()`、`has()`、`del()`(动词开头)
261
- - 变量名:`val`、`key`、`bl`(简洁无废话)
262
-
263
- ## 测试
264
-
265
- ```bash
266
- # 运行测试
267
- npm test
268
- ```
269
-
270
- ## 许可证
271
-
272
- ISC License
273
-
274
- ## 版本历史
275
-
276
- - v2.1.4: 添加缓存管理功能,修复内存泄漏问题
277
- - v2.1.3: 重构API,遵循简洁命名规范
278
- - v2.1.2: 添加JSON5格式支持
279
- - v2.1.1: 优化防抖功能
280
- - v2.1.0: 初始版本发布
281
-
282
- ## 贡献
283
-
284
- 欢迎提交Issue和Pull Request来改进这个项目。
1
+ # mm_config
2
+
3
+ 超级美眉配置帮助类,动态同步文件修改配置。
4
+
5
+ ## 功能特点
6
+
7
+ - 支持配置文件的动态读取和修改
8
+ - 修改配置后自动同步保存到JSON文件
9
+ - 使用Proxy实现属性监听,操作方便
10
+ - 支持同步和异步API操作
11
+ - 支持配置修改防抖功能,减少频繁保存
12
+ - 内置错误处理机制,提高稳定性
13
+ - 支持JSON5格式配置文件
14
+ - 简洁命名,遵循单字优先原则
15
+ - 内置缓存管理,避免重复创建配置实例
16
+
17
+ ## 安装
18
+
19
+ ```bash
20
+ npm install mm_config
21
+ ```
22
+
23
+ ## 快速开始
24
+
25
+ ### 基本使用
26
+
27
+ ```javascript
28
+ const { create } = require('mm_config');
29
+
30
+ // 创建配置并指定保存路径
31
+ const config = create("./config.json", {
32
+ name: "demo",
33
+ state: 1
34
+ });
35
+
36
+ // 修改配置会自动保存到文件
37
+ config.name = "test";
38
+ config.sort = 2;
39
+
40
+ console.log(config); // { name: 'test', state: 1, sort: 2 }
41
+ ```
42
+
43
+ ### 异步使用
44
+
45
+ ```javascript
46
+ const { createAsync } = require('mm_config');
47
+
48
+ async function setup() {
49
+ const config = await createAsync("./async_config.json", {
50
+ name: "asyncDemo"
51
+ });
52
+
53
+ config.timestamp = new Date().toISOString();
54
+ return config;
55
+ }
56
+ ```
57
+
58
+ ## API说明
59
+
60
+ ### 导入模块
61
+
62
+ ```javascript
63
+ // 导入配置类
64
+ const { Config, create, createAsync, clear, clearAll } = require('mm_config');
65
+ ```
66
+
67
+ ### 配置初始化
68
+
69
+ #### 同步API
70
+
71
+ ```javascript
72
+ /**
73
+ * 创建同步配置
74
+ * @param {string} file - 配置文件路径
75
+ * @param {object} config - 配置对象,可选
76
+ * @param {object} options - 配置选项,可选
77
+ * @param {number} options.debounce_time - 防抖时间(ms),默认0
78
+ * @param {boolean} options.pretty - 是否美化输出,默认true
79
+ * @param {string} options.format - 格式(json/json5),默认json
80
+ * @returns {Proxy} 返回配置代理对象
81
+ */
82
+ const config = create(file, config, options);
83
+ ```
84
+
85
+ #### 异步API
86
+
87
+ ```javascript
88
+ /**
89
+ * 创建异步配置
90
+ * @param {string} file - 配置文件路径
91
+ * @param {object} config - 配置对象,可选
92
+ * @param {object} options - 配置选项,可选
93
+ * @returns {Promise<Proxy>} 返回配置代理对象的Promise
94
+ */
95
+ const config = await createAsync(file, config, options);
96
+ ```
97
+
98
+ #### 缓存管理API
99
+
100
+ ```javascript
101
+ /**
102
+ * 清理指定文件配置缓存
103
+ * @param {string} file - 配置文件路径
104
+ */
105
+ clear(file);
106
+
107
+ /**
108
+ * 清理所有配置缓存
109
+ */
110
+ clearAll();
111
+ ```
112
+
113
+ #### 代理对象特殊方法
114
+
115
+ 通过代理对象可以访问以下特殊方法:
116
+
117
+ - `_saveSync()`: 同步保存配置到文件
118
+ - `_saveAsync()`: 异步保存配置到文件
119
+ - `_raw`: 获取原始配置对象
120
+
121
+ ## 使用示例
122
+
123
+ ### 1. 基本同步配置
124
+
125
+ ```javascript
126
+ const { create } = require('mm_config');
127
+
128
+ // 创建配置并指定保存路径
129
+ const config = create("./config.json", {
130
+ name: "demo",
131
+ state: 1
132
+ });
133
+
134
+ // 修改配置会自动保存到文件
135
+ config.name = "test";
136
+ config.sort = 2;
137
+
138
+ // 显式调用保存
139
+ config._saveSync();
140
+
141
+ // 读取现有配置
142
+ const existingConfig = create("./config.json");
143
+ console.log(existingConfig.name); // "test"
144
+ ```
145
+
146
+ ### 2. 使用异步API
147
+
148
+ ```javascript
149
+ const { createAsync } = require('mm_config');
150
+
151
+ async function setupConfig() {
152
+ // 创建异步配置
153
+ const config = await createAsync("./async_config.json", {
154
+ name: "asyncDemo",
155
+ version: "1.0.0"
156
+ });
157
+
158
+ // 修改配置会异步自动保存
159
+ config.timestamp = new Date().toISOString();
160
+
161
+ // 显式调用异步保存
162
+ await config._saveAsync();
163
+
164
+ return config;
165
+ }
166
+
167
+ setupConfig().then(config => {
168
+ console.log('配置设置完成:', config);
169
+ });
170
+ ```
171
+
172
+ ### 3. 使用防抖功能
173
+
174
+ ```javascript
175
+ const { create } = require('mm_config');
176
+
177
+ // 创建带防抖的配置(500ms延迟保存)
178
+ const config = create("./debounce_config.json", {
179
+ name: "debounceDemo"
180
+ }, {
181
+ debounce_time: 500 // 500ms防抖时间
182
+ });
183
+
184
+ // 快速多次修改,只会在最后一次修改后500ms保存一次
185
+ for (let i = 0; i < 10; i++) {
186
+ config.counter = i;
187
+ config.timestamp = new Date().toISOString();
188
+ }
189
+
190
+ // 最终只会保存最后一次的值
191
+ console.log(config.counter); // 9
192
+ ```
193
+
194
+ ### 4. 使用JSON5格式
195
+
196
+ ```javascript
197
+ const { create } = require('mm_config');
198
+
199
+ // 创建支持JSON5格式的配置
200
+ const config = create("./config.json5", null, {
201
+ format: 'json5'
202
+ });
203
+
204
+ // JSON5格式支持注释、尾随逗号等特性
205
+ config.description = "This supports JSON5 format";
206
+ config.version = "1.0.0";
207
+ ```
208
+
209
+ ### 5. 直接使用Config类
210
+
211
+ ```javascript
212
+ const { Config } = require('mm_config');
213
+
214
+ // 创建配置实例
215
+ const cfg = new Config({
216
+ debounce_time: 100,
217
+ pretty: true
218
+ }, {
219
+ name: "directDemo"
220
+ });
221
+
222
+ // 获取代理对象
223
+ const config = cfg.getProxy();
224
+
225
+ // 使用配置
226
+ config.version = "1.0.0";
227
+
228
+ // 手动调用保存方法
229
+ cfg.saveSync();
230
+ await cfg.saveAsync();
231
+ ```
232
+
233
+ ### 6. 使用配置操作方法
234
+
235
+ ```javascript
236
+ const { Config } = require('mm_config');
237
+
238
+ const cfg = new Config({}, "./methods_config.json");
239
+
240
+ async function manageConfig() {
241
+ // 设置配置值
242
+ await cfg.set("name", "test");
243
+
244
+ // 获取配置值
245
+ const name = await cfg.get("name");
246
+ console.log('获取到的名称:', name); // "test"
247
+
248
+ // 检查配置是否存在
249
+ const hasName = await cfg.has("name");
250
+ console.log('是否存在名称:', hasName); // true
251
+
252
+ // 删除配置项
253
+ await cfg.del("name");
254
+
255
+ // 获取所有键
256
+ const keys = await cfg.keys();
257
+ console.log('所有键:', keys);
258
+ }
259
+
260
+ manageConfig();
261
+ ```
262
+
263
+ ### 7. 缓存管理功能
264
+
265
+ ```javascript
266
+ const { create, clear, clearAll } = require('mm_config');
267
+
268
+ // 创建配置实例
269
+ const config1 = create("./cache1.json", { test: "cache1" });
270
+ const config2 = create("./cache2.json", { test: "cache2" });
271
+
272
+ // 清理指定文件缓存
273
+ clear("./cache1.json");
274
+
275
+ // 重新创建会生成新实例
276
+ const config1New = create("./cache1.json", { test: "cache1_new" });
277
+
278
+ // 清理所有缓存
279
+ clearAll();
280
+
281
+ // 所有配置都会重新创建
282
+ const config2New = create("./cache2.json", { test: "cache2_new" });
283
+ ```
284
+
285
+ ## 配置选项
286
+
287
+ 创建配置时可提供以下选项:
288
+
289
+ | 选项 | 类型 | 默认值 | 描述 |
290
+ |------|------|--------|------|
291
+ | debounce_time | number | 0 | 防抖时间(毫秒),设置后多次修改会延迟保存 |
292
+ | pretty | boolean | true | 是否美化JSON输出,设为false可生成压缩的JSON |
293
+ | format | string | 'json' | 配置文件格式,可选'json'或'json5' |
294
+
295
+ ## 高级用法
296
+
297
+ ### 错误处理
298
+
299
+ ```javascript
300
+ const { create } = require('mm_config');
301
+
302
+ try {
303
+ const config = create("./config.json", { test: 1 });
304
+ config.invalid = "value";
305
+ } catch (error) {
306
+ console.error('配置操作出错:', error.message);
307
+ }
308
+ ```
309
+
310
+ ### 性能优化
311
+
312
+ ```javascript
313
+ // 使用防抖减少频繁的文件IO操作
314
+ const config = create("./config.json", {}, {
315
+ debounce_time: 1000 // 1秒防抖
316
+ });
317
+
318
+ // 批量操作时使用_raw属性避免频繁保存
319
+ const rawConfig = config._raw;
320
+ rawConfig.field1 = "value1";
321
+ rawConfig.field2 = "value2";
322
+ rawConfig.field3 = "value3";
323
+ // 手动保存一次
324
+ config._saveSync();
325
+ ```
326
+
327
+ ## 注意事项
328
+
329
+ 1. **文件权限**: 确保有文件的写入权限
330
+ 2. **异步操作**: 异步API适合在非阻塞环境中使用
331
+ 3. **缓存管理**: 配置实例会被缓存,相同文件路径会返回同一实例
332
+ 4. **JSON5格式**: 当使用JSON5格式时,保存仍使用标准JSON格式,但可读取JSON5格式的文件
333
+ 5. **内存管理**: 使用clear/clearAll可清理缓存,避免内存泄漏
334
+
335
+ ## 依赖
336
+
337
+ - **json5**: 用于解析JSON5格式
338
+ - **mm_expand**: 提供文件操作扩展
339
+
340
+ ## 命名规范
341
+
342
+ 本模块遵循简洁命名原则:
343
+ - 类名:`Config`(单字优先)
344
+ - 方法名:`get()`、`set()`、`has()`、`del()`(动词开头)
345
+ - 变量名:`val`、`key`、`bl`(简洁无废话)
346
+
347
+ ## 测试
348
+
349
+ ```bash
350
+ # 运行测试
351
+ npm test
352
+
353
+ # 或直接运行测试文件
354
+ node test.js
355
+ ```
356
+
357
+ ## 许可证
358
+
359
+ ISC License
360
+
361
+ ## 版本历史
362
+
363
+ - **v2.1.6**: 修复代码规范问题,完善文档
364
+ - **v2.1.5**: 优化ESLint配置,提升代码质量
365
+ - **v2.1.4**: 添加缓存管理功能,修复内存泄漏问题
366
+ - **v2.1.3**: 重构API,遵循简洁命名规范
367
+ - **v2.1.2**: 添加JSON5格式支持
368
+ - **v2.1.1**: 优化防抖功能
369
+ - **v2.1.0**: 初始版本发布
370
+
371
+ ## 贡献
372
+
373
+ 欢迎提交Issue和Pull Request来改进这个项目。
374
+
375
+ ## 相关项目
376
+
377
+ - [mm_expand](https://github.com/supermm/mm_expand) - 文件操作扩展模块
378
+ - [mm_eslint](https://github.com/supermm/mm_eslint) - ESLint配置插件
379
+
380
+ ---
381
+
382
+ **mm_config** - 让配置管理变得简单高效!