mm_machine 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/item.js +12 -12
- package/package.json +18 -30
- package/.gitattributes +0 -5
- package/.prettierrc +0 -8
- package/app/test1/config_demo.json +0 -10
- package/app/test1/demo.json +0 -10
- package/app/test1/index.js +0 -63
- package/app/test2/after.js +0 -13
- package/app/test2/config_demo.json +0 -10
- package/app/test2/demo.json +0 -10
- package/app/test2/index.js +0 -16
- package/app/test2/main.js +0 -36
- package/debug_config.js +0 -37
- package/debug_detailed.js +0 -75
- package/debug_test.js +0 -65
- package/demo/test1/config_demo.json +0 -34
- package/demo/test1/demo.json +0 -34
- package/demo/test1/index.js +0 -33
- package/demo/test2/after.js +0 -15
- package/demo/test2/config_demo.json +0 -70
- package/demo/test2/demo.json +0 -70
- package/demo/test2/index.js +0 -34
- package/demo/test2/main.js +0 -16
- package/demo2/test1/demo.json +0 -34
- package/demo2/test1/index.js +0 -33
- package/demo2/test2/after.js +0 -15
- package/demo2/test2/demo.json +0 -70
- package/demo2/test2/main.js +0 -16
- package/eslint.config.js +0 -209
- package/methods_documentation.md +0 -225
- package/nodemon.json +0 -25
- package/test.js +0 -151
- package/test_easy.js +0 -52
package/methods_documentation.md
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
# 方法清单文档
|
|
2
|
-
|
|
3
|
-
## 1. index.js - Index类方法
|
|
4
|
-
|
|
5
|
-
### 构造函数
|
|
6
|
-
|
|
7
|
-
- **constructor(scope, dir_base)** - 初始化Index类实例
|
|
8
|
-
- `scope`: 作用域(同时作为检索的后缀名)
|
|
9
|
-
- `dir_base`: 模块目录
|
|
10
|
-
|
|
11
|
-
### 私有方法
|
|
12
|
-
|
|
13
|
-
- **\_execute(module, method, params)** - 执行模块方法
|
|
14
|
-
- `module`: 模块对象
|
|
15
|
-
- `method`: 方法名称
|
|
16
|
-
- `params`: 参数数组
|
|
17
|
-
- 返回: Promise<any> - 执行结果
|
|
18
|
-
|
|
19
|
-
### 公共方法
|
|
20
|
-
|
|
21
|
-
- **clear()** - 清除接口缓存
|
|
22
|
-
- **load(dir, cg, file)** - 加载项
|
|
23
|
-
- `dir`: 文件路径
|
|
24
|
-
- `cg`: 配置参数
|
|
25
|
-
- `file`: 配置文件
|
|
26
|
-
- 返回: Promise<Object|null> - 加载的驱动或配置对象
|
|
27
|
-
- **loads(list)** - 加载列表
|
|
28
|
-
- `list`: 文件列表
|
|
29
|
-
- 返回: Promise<void>
|
|
30
|
-
- **sort()** - 排序接口列表
|
|
31
|
-
- **update_before(dir)** - 更新前钩子方法
|
|
32
|
-
- `dir`: 目录路径
|
|
33
|
-
- **update_after(dir)** - 更新后钩子方法
|
|
34
|
-
- `dir`: 目录路径
|
|
35
|
-
- **updateConfigAll(searchPath, accurate)** - 更新所有配置
|
|
36
|
-
- `searchPath`: 检索路径
|
|
37
|
-
- `accurate`: 精准路径标志
|
|
38
|
-
- 返回: Promise<void>
|
|
39
|
-
- **updateConfigHave(dir)** - 更新已有配置文件
|
|
40
|
-
- `dir`: 目录路径
|
|
41
|
-
- 返回: Promise<void>
|
|
42
|
-
- **updateConfig(dir, accurate, clear)** - 更新配置
|
|
43
|
-
- `dir`: 检索目录
|
|
44
|
-
- `accurate`: 精准路径标志
|
|
45
|
-
- `clear`: 是否清除现有配置
|
|
46
|
-
- 返回: Promise<void>
|
|
47
|
-
- **update_script()** - 更新JS脚本
|
|
48
|
-
- 返回: Promise<void>
|
|
49
|
-
- **update_main(dir, accurate, loadJS, clear)** - 更新主逻辑
|
|
50
|
-
- `dir`: 检索路径
|
|
51
|
-
- `accurate`: 精准路径标志
|
|
52
|
-
- `loadJS`: 是否加载JS
|
|
53
|
-
- `clear`: 是否清除现有配置
|
|
54
|
-
- 返回: Promise<void>
|
|
55
|
-
- **update(dir, accurate, loadJS, clear)** - 完整更新流程
|
|
56
|
-
- `dir`: 检索路径
|
|
57
|
-
- `accurate`: 精准路径标志
|
|
58
|
-
- `loadJS`: 是否加载JS
|
|
59
|
-
- `clear`: 是否清除现有配置
|
|
60
|
-
- **get(name)** - 查询配置项
|
|
61
|
-
- `name`: 配置项名称
|
|
62
|
-
- 返回: Object|null - 配置项对象
|
|
63
|
-
- **set(name, cg)** - 设置配置项
|
|
64
|
-
- `name`: 配置项名称
|
|
65
|
-
- `cg`: 配置对象
|
|
66
|
-
- 返回: Boolean - 是否设置成功
|
|
67
|
-
- **save()** - 保存所有配置
|
|
68
|
-
- 返回: Boolean - 是否保存成功
|
|
69
|
-
- **add(config)** - 添加插件
|
|
70
|
-
- `config`: 配置对象
|
|
71
|
-
- 返回: Promise<Object|null> - 新添加的插件对象
|
|
72
|
-
- **del(name)** - 删除插件
|
|
73
|
-
- `name`: 插件名称
|
|
74
|
-
- 返回: Promise<Boolean> - 是否删除成功
|
|
75
|
-
- **load(name)** - 加载插件(重载版本)
|
|
76
|
-
- `name`: 插件名称
|
|
77
|
-
- 返回: Promise<Object|null> - 加载的插件对象
|
|
78
|
-
- **unload(name)** - 卸载插件
|
|
79
|
-
- `name`: 插件名称
|
|
80
|
-
- 返回: Promise<Boolean> - 是否卸载成功
|
|
81
|
-
- **reload(name)** - 重新加载插件
|
|
82
|
-
- `name`: 插件名称
|
|
83
|
-
- 返回: Promise<Object|null> - 重新加载的插件对象
|
|
84
|
-
- **loadFile(file, create)** - 通过文件加载配置
|
|
85
|
-
- `file`: 文件名
|
|
86
|
-
- `create`: 不存在则创建标志
|
|
87
|
-
- 返回: Promise<Object|null|String> - 加载结果
|
|
88
|
-
- **run(name, method, ...params)** - 调用函数
|
|
89
|
-
- `name`: 模块名
|
|
90
|
-
- `method`: 函数名
|
|
91
|
-
- `params`: 参数集合
|
|
92
|
-
- 返回: Promise<any> - 执行结果
|
|
93
|
-
- **exec(name, method, ...params)** - 执行方法
|
|
94
|
-
- `name`: 插件名称
|
|
95
|
-
- `method`: 方法名称
|
|
96
|
-
- `params`: 参数集合
|
|
97
|
-
- 返回: Promise<any> - 执行结果
|
|
98
|
-
|
|
99
|
-
### 属性
|
|
100
|
-
|
|
101
|
-
- **Drive** - 默认驱动类,指向Item类
|
|
102
|
-
|
|
103
|
-
## 2. item.js - Item类方法
|
|
104
|
-
|
|
105
|
-
### 构造函数
|
|
106
|
-
|
|
107
|
-
- **constructor(dir, dir_base)** - 初始化Item类实例
|
|
108
|
-
- `dir`: 当前目录
|
|
109
|
-
- `dir_base`: 模块目录
|
|
110
|
-
|
|
111
|
-
### 私有方法
|
|
112
|
-
|
|
113
|
-
- **\_remove(module)** - 移除模块
|
|
114
|
-
- `module`: 模块对象或路径
|
|
115
|
-
|
|
116
|
-
### 公共方法
|
|
117
|
-
|
|
118
|
-
- **setConfig(config)** - 设置配置
|
|
119
|
-
- `config`: 配置对象
|
|
120
|
-
- **setConfig_after()** - 设置配置后钩子方法
|
|
121
|
-
- **newScript(file)** - 新建脚本文件
|
|
122
|
-
- `file`: 目标文件路径
|
|
123
|
-
- **unloadScript(file)** - 卸载脚本
|
|
124
|
-
- `file`: 脚本文件路径
|
|
125
|
-
- **reloadScript()** - 重新加载脚本
|
|
126
|
-
- **unload()** - 卸载钩子方法
|
|
127
|
-
- **unload_after(remove)** - 卸载之后处理
|
|
128
|
-
- `remove`: 是否删除文件
|
|
129
|
-
- **loadScript(file, name)** - 加载脚本
|
|
130
|
-
- `file`: 文件路径
|
|
131
|
-
- `name`: 函数名
|
|
132
|
-
- 返回: Object|null - 加载的模块对象
|
|
133
|
-
- **newConfig(file)** - 新建配置文件
|
|
134
|
-
- `file`: 目标文件路径
|
|
135
|
-
- **loadFile(file, name)** - 加载配置文件
|
|
136
|
-
- `file`: 文件路径
|
|
137
|
-
- `name`: 配置项名称
|
|
138
|
-
- 返回: Object|null - 配置对象
|
|
139
|
-
- **delDir()** - 删除目录
|
|
140
|
-
- **removeFile()** - 删除配置和脚本文件
|
|
141
|
-
- 返回: String|null - 错误消息
|
|
142
|
-
- **loadConfig(configData, name)** - 载入配置
|
|
143
|
-
- `configData`: 配置对象或配置路径
|
|
144
|
-
- `name`: 配置名称
|
|
145
|
-
- **load_before()** - 加载前处理
|
|
146
|
-
- **load()** - 加载处理
|
|
147
|
-
- **reload()** - 重载配置和脚本
|
|
148
|
-
- **save()** - 保存配置
|
|
149
|
-
- **main(...params)** - 主要执行函数
|
|
150
|
-
- `params`: 参数集合
|
|
151
|
-
- 返回: Promise<any> - 执行结果
|
|
152
|
-
- **run(...params)** - 运行主函数
|
|
153
|
-
- `params`: 参数集合
|
|
154
|
-
- 返回: Promise<any> - 执行结果
|
|
155
|
-
- **exec(method, ...params)** - 调用函数(核心执行方法)
|
|
156
|
-
- `method`: 函数名
|
|
157
|
-
- `params`: 参数集合
|
|
158
|
-
- 返回: Promise<any> - 执行结果
|
|
159
|
-
|
|
160
|
-
## 3. item.js - 全局方法
|
|
161
|
-
|
|
162
|
-
- **$.require(file, func)** - 增强require函数,支持热更新
|
|
163
|
-
- `file`: 文件路径
|
|
164
|
-
- `func`: 回调函数
|
|
165
|
-
- 返回: Object - 加载的模块
|
|
166
|
-
|
|
167
|
-
- **$.loadJson(file, func)** - 增强JSON加载函数,支持热更新
|
|
168
|
-
- `file`: 文件路径
|
|
169
|
-
- `func`: 回调函数
|
|
170
|
-
- 返回: Object - 解析的JSON对象
|
|
171
|
-
|
|
172
|
-
## 方法命名规范检查
|
|
173
|
-
|
|
174
|
-
### 符合规范的方法名(小驼峰)
|
|
175
|
-
|
|
176
|
-
- clear
|
|
177
|
-
- load
|
|
178
|
-
- loads
|
|
179
|
-
- sort
|
|
180
|
-
- updateConfigAll
|
|
181
|
-
- updateConfigHave
|
|
182
|
-
- updateConfig
|
|
183
|
-
- get
|
|
184
|
-
- set
|
|
185
|
-
- save
|
|
186
|
-
- add
|
|
187
|
-
- del
|
|
188
|
-
- unload
|
|
189
|
-
- reload
|
|
190
|
-
- loadFile
|
|
191
|
-
- run
|
|
192
|
-
- exec
|
|
193
|
-
- setConfig
|
|
194
|
-
- newScript
|
|
195
|
-
- unloadScript
|
|
196
|
-
- reloadScript
|
|
197
|
-
- loadScript
|
|
198
|
-
- newConfig
|
|
199
|
-
- loadFile
|
|
200
|
-
- delDir
|
|
201
|
-
- removeFile
|
|
202
|
-
- loadConfig
|
|
203
|
-
- main
|
|
204
|
-
|
|
205
|
-
### 符合规范的时态方法名
|
|
206
|
-
|
|
207
|
-
- update_before
|
|
208
|
-
- update_after
|
|
209
|
-
- setConfig_after
|
|
210
|
-
- unload_after
|
|
211
|
-
- load_before
|
|
212
|
-
|
|
213
|
-
### 需要注意的方法名
|
|
214
|
-
|
|
215
|
-
- **updateScript** - 已从update_script修改为符合小驼峰命名规范
|
|
216
|
-
- **update_main** - 保持不变,因为\_main属于时态方法命名格式(main表示主逻辑)
|
|
217
|
-
|
|
218
|
-
## 重复方法名
|
|
219
|
-
|
|
220
|
-
在index.js中发现两个同名的load方法:
|
|
221
|
-
|
|
222
|
-
1. `load(dir, cg, file)` - 加载项
|
|
223
|
-
2. `load(name)` - 加载插件
|
|
224
|
-
|
|
225
|
-
建议重命名其中一个以避免混淆。
|
package/nodemon.json
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"restartable": "rs",
|
|
3
|
-
"ignore": [
|
|
4
|
-
".git",
|
|
5
|
-
".svn",
|
|
6
|
-
"node_modules/**/node_modules",
|
|
7
|
-
"static/src/*",
|
|
8
|
-
"static/js/*",
|
|
9
|
-
"static/**/js",
|
|
10
|
-
"static/*.js",
|
|
11
|
-
"*data.json",
|
|
12
|
-
"*cache.json"
|
|
13
|
-
],
|
|
14
|
-
"verbose": true,
|
|
15
|
-
"execMap": {
|
|
16
|
-
"": "node",
|
|
17
|
-
"js": "node --harmony"
|
|
18
|
-
},
|
|
19
|
-
"watch": [],
|
|
20
|
-
"env": {
|
|
21
|
-
"NODE_ENV": "development"
|
|
22
|
-
},
|
|
23
|
-
"ext": "js json",
|
|
24
|
-
"legacy-watch": false
|
|
25
|
-
}
|
package/test.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
var { Item, Index } = require('./index.js');
|
|
2
|
-
|
|
3
|
-
class Drive extends Item {
|
|
4
|
-
constructor(dir, dir_base) {
|
|
5
|
-
super(dir, dir_base);
|
|
6
|
-
this.default_file = './demo.json';
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
class Engine extends Index {
|
|
11
|
-
constructor(scope, dir_base) {
|
|
12
|
-
super(scope, dir_base);
|
|
13
|
-
/**
|
|
14
|
-
* 模式
|
|
15
|
-
* 1.生产模式,改变文件不会重新加载
|
|
16
|
-
* 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
|
|
17
|
-
* 3.热重载模式,改变配置文件都会加载配置和脚本
|
|
18
|
-
* 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
|
|
19
|
-
* 5.重载模式,执行完后重新加载脚本,避免变量污染
|
|
20
|
-
*/
|
|
21
|
-
this.mode = 3;
|
|
22
|
-
// 机制类型,必须填写,用于检索文件
|
|
23
|
-
this.type = 'demo';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 设置引擎的Drive类
|
|
29
|
-
* @type {Drive}
|
|
30
|
-
*/
|
|
31
|
-
Engine.prototype.Drive = Drive;
|
|
32
|
-
|
|
33
|
-
async function initEngine() {
|
|
34
|
-
var engine = new Engine('sys', __dirname);
|
|
35
|
-
console.info('→ 加载mod');
|
|
36
|
-
await engine.update('./app/'.fullname(__dirname));
|
|
37
|
-
console.log('模块数', engine.list.length);
|
|
38
|
-
return engine;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async function runBasicTests(engine) {
|
|
42
|
-
await engine.run('test1', 'init');
|
|
43
|
-
await engine.exec('test1', 'init');
|
|
44
|
-
await engine.run(null, 'main');
|
|
45
|
-
await engine.exec(null, 'main');
|
|
46
|
-
|
|
47
|
-
var ret = await engine.run('test2', 'main');
|
|
48
|
-
console.log('指明回调test2', ret);
|
|
49
|
-
|
|
50
|
-
var ret = await engine.exec('test1', 'main');
|
|
51
|
-
console.log('指明回调test1', ret);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function setupMainTimer(engine) {
|
|
55
|
-
var i = 0;
|
|
56
|
-
var timer = setInterval(async () => {
|
|
57
|
-
await engine.run('test1', 'main');
|
|
58
|
-
await engine.run('test2', 'main');
|
|
59
|
-
i++;
|
|
60
|
-
if (i == 3) {
|
|
61
|
-
console.info('→ 重载mod');
|
|
62
|
-
await engine.reload('test1');
|
|
63
|
-
} else if (i == 5) {
|
|
64
|
-
console.info('→ 卸载mod');
|
|
65
|
-
await engine.unload('test2');
|
|
66
|
-
} else if (i == 16) {
|
|
67
|
-
console.info('→ 卸载并删除mod');
|
|
68
|
-
await engine.unload('test1', true);
|
|
69
|
-
} else if (i == 18) {
|
|
70
|
-
clearTimeout(timer);
|
|
71
|
-
}
|
|
72
|
-
}, 3000);
|
|
73
|
-
return timer;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function setupFileMods(engine) {
|
|
77
|
-
setTimeout(async () => {
|
|
78
|
-
var file = './app/test1/index.js'.fullname(__dirname);
|
|
79
|
-
if (file.hasFile()) {
|
|
80
|
-
var text = file.loadText();
|
|
81
|
-
text = text.replace('counter = 0', 'counter = 100');
|
|
82
|
-
file.saveText(text);
|
|
83
|
-
var ret = await engine.exec('test1', 'main');
|
|
84
|
-
console.log('这结果', ret);
|
|
85
|
-
}
|
|
86
|
-
}, 7000);
|
|
87
|
-
|
|
88
|
-
setTimeout(() => {
|
|
89
|
-
var file = './demo/test2/index.js'.fullname(__dirname);
|
|
90
|
-
if (file.hasFile()) {
|
|
91
|
-
var text = file.loadText();
|
|
92
|
-
text = text.replace('123', '7654321');
|
|
93
|
-
file.saveText(text);
|
|
94
|
-
}
|
|
95
|
-
}, 11000);
|
|
96
|
-
|
|
97
|
-
setTimeout(async () => {
|
|
98
|
-
console.info('→ 热重载失效');
|
|
99
|
-
$.mod.config.watch = false;
|
|
100
|
-
var file = './app/test1/index.js'.fullname(__dirname);
|
|
101
|
-
if (file.hasFile()) {
|
|
102
|
-
var text = file.loadText();
|
|
103
|
-
text = text.replace('counter = 100', 'counter = 200');
|
|
104
|
-
file.saveText(text);
|
|
105
|
-
var ret = await engine.exec('test1', 'main');
|
|
106
|
-
console.log('这结果', ret);
|
|
107
|
-
}
|
|
108
|
-
}, 16000);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function setupFinalTimer(engine) {
|
|
112
|
-
var n = 0;
|
|
113
|
-
var timer_2 = setInterval(async () => {
|
|
114
|
-
var ret = await engine.exec('test1', 'main');
|
|
115
|
-
console.info('最后运行test1', ret);
|
|
116
|
-
var plug = engine.get('test1');
|
|
117
|
-
if (plug) {
|
|
118
|
-
console.log('查看变化1', plug.config);
|
|
119
|
-
}
|
|
120
|
-
var plug = engine.get('test2');
|
|
121
|
-
if (plug) {
|
|
122
|
-
var ret = await plug.run();
|
|
123
|
-
console.log('查看变化2', plug.config);
|
|
124
|
-
}
|
|
125
|
-
n++;
|
|
126
|
-
if (n == 6) {
|
|
127
|
-
clearInterval(timer_2);
|
|
128
|
-
process.exit(0);
|
|
129
|
-
}
|
|
130
|
-
}, 10000);
|
|
131
|
-
return timer_2;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async function demo() {
|
|
135
|
-
var engine = await initEngine();
|
|
136
|
-
await runBasicTests(engine);
|
|
137
|
-
setupMainTimer(engine);
|
|
138
|
-
setupFileMods(engine);
|
|
139
|
-
setupFinalTimer(engine);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/* 调用示例 */
|
|
143
|
-
async function test() {
|
|
144
|
-
'./demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
|
|
145
|
-
setTimeout(() => {
|
|
146
|
-
demo();
|
|
147
|
-
}, 1000);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
test();
|
package/test_easy.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
var { Item, Index } = require('./index.js');
|
|
2
|
-
|
|
3
|
-
class Drive extends Item {
|
|
4
|
-
constructor(dir, dir_base) {
|
|
5
|
-
super(dir, dir_base);
|
|
6
|
-
this.default_file = './demo.json';
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
class Engine extends Index {
|
|
11
|
-
constructor(scope, dir_base) {
|
|
12
|
-
super(scope, dir_base);
|
|
13
|
-
/**
|
|
14
|
-
* 模式
|
|
15
|
-
* 1.生产模式,改变文件不会重新加载
|
|
16
|
-
* 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
|
|
17
|
-
* 3.热重载模式,改变配置文件都会加载配置和脚本
|
|
18
|
-
* 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
|
|
19
|
-
* 5.重载模式,执行完后重新加载脚本,避免变量污染
|
|
20
|
-
*/
|
|
21
|
-
this.mode = 3;
|
|
22
|
-
// 机制类型,必须填写,用于检索文件
|
|
23
|
-
this.type = 'demo';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 设置引擎的Drive类
|
|
29
|
-
* @type {Drive}
|
|
30
|
-
*/
|
|
31
|
-
Engine.prototype.Drive = Drive;
|
|
32
|
-
|
|
33
|
-
async function initEngine() {
|
|
34
|
-
var engine = new Engine('sys', __dirname);
|
|
35
|
-
console.info('→ 加载mod');
|
|
36
|
-
await engine.update('./app/'.fullname(__dirname));
|
|
37
|
-
console.log('模块数', engine.list.length);
|
|
38
|
-
return engine;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
async function loadModule(file) {
|
|
44
|
-
var engine = await initEngine();
|
|
45
|
-
await engine.load(file);
|
|
46
|
-
|
|
47
|
-
// setInterval(() => {
|
|
48
|
-
// console.log('模块数', engine.list);
|
|
49
|
-
// }, 6000);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
loadModule('./app/test1/config_demo.json');
|