mm_config 2.1.5 → 2.1.7
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 +382 -284
- package/README_EN.md +382 -0
- package/index.js +281 -269
- package/package.json +25 -6
- package/.gitattributes +0 -5
- package/test.js +0 -199
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
|
-
##
|
|
24
|
-
|
|
25
|
-
###
|
|
26
|
-
|
|
27
|
-
```javascript
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
config.
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
//
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
###
|
|
210
|
-
|
|
211
|
-
```javascript
|
|
212
|
-
const {
|
|
213
|
-
|
|
214
|
-
// 创建配置实例
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
+
```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** - 让配置管理变得简单高效!
|