mm_config 2.1.3 → 2.1.4
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 +284 -194
- package/cache_test1.json +3 -0
- package/cache_test2.json +3 -0
- package/cache_test3.json +3 -0
- package/config1.json +6 -0
- package/config2.json +4 -0
- package/config_async.json +5 -0
- package/config_debounce.json +5 -0
- package/config_json5.json +4 -0
- package/index.js +337 -185
- package/package.json +3 -3
- package/test.js +125 -65
- package/base.js +0 -30
- package/config.json +0 -6
package/README.md
CHANGED
|
@@ -1,194 +1,284 @@
|
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*
|
|
44
|
-
* @param {
|
|
45
|
-
* @
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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来改进这个项目。
|
package/cache_test1.json
ADDED
package/cache_test2.json
ADDED
package/cache_test3.json
ADDED
package/config1.json
ADDED
package/config2.json
ADDED