mm_machine 2.0.2 → 2.0.3
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 +576 -576
- package/app/test1/config_demo.json +10 -0
- package/app/test2/config_demo.json +10 -0
- package/demo/test1/config_demo.json +33 -33
- package/demo/test1/demo.json +33 -33
- package/demo/test1/index.js +29 -29
- package/demo/test2/after.js +14 -14
- package/demo/test2/config_demo.json +67 -67
- package/demo/test2/demo.json +67 -67
- package/demo/test2/index.js +14 -14
- package/demo/test2/main.js +15 -15
- package/demo2/test1/demo.json +33 -33
- package/demo2/test1/index.js +29 -29
- package/demo2/test2/after.js +14 -14
- package/demo2/test2/demo.json +67 -67
- package/demo2/test2/main.js +15 -15
- package/index.js +16 -16
- package/package.json +1 -1
- package/test.js +129 -129
package/demo2/test1/index.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
var i = 0;
|
|
2
|
-
|
|
3
|
-
function test() {
|
|
4
|
-
console.log("你好123", i++)
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function main() {
|
|
8
|
-
test();
|
|
9
|
-
return i;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
exports.main = main;
|
|
13
|
-
|
|
14
|
-
exports.main_before = function() {
|
|
15
|
-
console.log("test1请求前")
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
exports.main_after = async function(ret) {
|
|
19
|
-
console.log("test1请求后", ret)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
exports.load = function() {
|
|
23
|
-
console.log("加载test1");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
exports.init = function() {
|
|
27
|
-
console.log("初始化test1");
|
|
28
|
-
}
|
|
29
|
-
|
|
1
|
+
var i = 0;
|
|
2
|
+
|
|
3
|
+
function test() {
|
|
4
|
+
console.log("你好123", i++)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function main() {
|
|
8
|
+
test();
|
|
9
|
+
return i;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.main = main;
|
|
13
|
+
|
|
14
|
+
exports.main_before = function() {
|
|
15
|
+
console.log("test1请求前")
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.main_after = async function(ret) {
|
|
19
|
+
console.log("test1请求后", ret)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.load = function() {
|
|
23
|
+
console.log("加载test1");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.init = function() {
|
|
27
|
+
console.log("初始化test1");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
30
|
console.log("引用了test1")
|
package/demo2/test2/after.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
class Demo {
|
|
2
|
-
constructor() {}
|
|
3
|
-
}
|
|
4
|
-
var i = 0;
|
|
5
|
-
Demo.prototype.main = function() {
|
|
6
|
-
console.log("我很好123", i++);
|
|
7
|
-
return i;
|
|
8
|
-
}
|
|
9
|
-
Demo.prototype.init = function(){
|
|
10
|
-
console.log("初始化test2");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
module.exports = new Demo();
|
|
14
|
-
|
|
1
|
+
class Demo {
|
|
2
|
+
constructor() {}
|
|
3
|
+
}
|
|
4
|
+
var i = 0;
|
|
5
|
+
Demo.prototype.main = function() {
|
|
6
|
+
console.log("我很好123", i++);
|
|
7
|
+
return i;
|
|
8
|
+
}
|
|
9
|
+
Demo.prototype.init = function(){
|
|
10
|
+
console.log("初始化test2");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
module.exports = new Demo();
|
|
14
|
+
|
|
15
15
|
console.log("引用了test2 after")
|
package/demo2/test2/demo.json
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
[{
|
|
2
|
-
/**
|
|
3
|
-
* 名称, 由中英文和下“_”组成, 用于卸载接口 例如: demo
|
|
4
|
-
*/
|
|
5
|
-
"name": "demo2",
|
|
6
|
-
/**
|
|
7
|
-
* 标题, 介绍作用
|
|
8
|
-
*/
|
|
9
|
-
"title": "示例脚本2",
|
|
10
|
-
/**
|
|
11
|
-
* 描述, 用于描述该有什么用的
|
|
12
|
-
*/
|
|
13
|
-
"description": "用于测试动态加载、更新、卸载、删除脚本",
|
|
14
|
-
/**
|
|
15
|
-
* 文件路径, 当调用函数不存在时,会先从文件中加载
|
|
16
|
-
*/
|
|
17
|
-
"func_file": "./main.js",
|
|
18
|
-
/**
|
|
19
|
-
* 回调函数名 用于决定调用脚本的哪个函数
|
|
20
|
-
*/
|
|
21
|
-
"func_name": "",
|
|
22
|
-
/**
|
|
23
|
-
* 排序
|
|
24
|
-
*/
|
|
25
|
-
"sort": 10,
|
|
26
|
-
/**
|
|
27
|
-
* 状态, 0表示未启用, 1表示启用
|
|
28
|
-
*/
|
|
29
|
-
"state": 1,
|
|
30
|
-
/**
|
|
31
|
-
* 显示, 0表示不显示, 1表示显示
|
|
32
|
-
*/
|
|
33
|
-
"show": 0
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
/**
|
|
37
|
-
* 名称, 由中英文和下“_”组成, 用于卸载接口 例如: demo
|
|
38
|
-
*/
|
|
39
|
-
"name": "demo3",
|
|
40
|
-
/**
|
|
41
|
-
* 标题, 介绍作用
|
|
42
|
-
*/
|
|
43
|
-
"title": "示例脚本3",
|
|
44
|
-
/**
|
|
45
|
-
* 描述, 用于描述该有什么用的
|
|
46
|
-
*/
|
|
47
|
-
"description": "用于测试动态加载、更新、卸载、删除脚本",
|
|
48
|
-
/**
|
|
49
|
-
* 文件路径, 当调用函数不存在时,会先从文件中加载
|
|
50
|
-
*/
|
|
51
|
-
"func_file": "./after.js",
|
|
52
|
-
/**
|
|
53
|
-
* 回调函数名 用于决定调用脚本的哪个函数
|
|
54
|
-
*/
|
|
55
|
-
"func_name": "main",
|
|
56
|
-
/**
|
|
57
|
-
* 排序
|
|
58
|
-
*/
|
|
59
|
-
"sort": 10,
|
|
60
|
-
/**
|
|
61
|
-
* 状态, 0表示未启用, 1表示启用
|
|
62
|
-
*/
|
|
63
|
-
"state": 1,
|
|
64
|
-
/**
|
|
65
|
-
* 显示, 0表示不显示, 1表示显示
|
|
66
|
-
*/
|
|
67
|
-
"show": 0
|
|
1
|
+
[{
|
|
2
|
+
/**
|
|
3
|
+
* 名称, 由中英文和下“_”组成, 用于卸载接口 例如: demo
|
|
4
|
+
*/
|
|
5
|
+
"name": "demo2",
|
|
6
|
+
/**
|
|
7
|
+
* 标题, 介绍作用
|
|
8
|
+
*/
|
|
9
|
+
"title": "示例脚本2",
|
|
10
|
+
/**
|
|
11
|
+
* 描述, 用于描述该有什么用的
|
|
12
|
+
*/
|
|
13
|
+
"description": "用于测试动态加载、更新、卸载、删除脚本",
|
|
14
|
+
/**
|
|
15
|
+
* 文件路径, 当调用函数不存在时,会先从文件中加载
|
|
16
|
+
*/
|
|
17
|
+
"func_file": "./main.js",
|
|
18
|
+
/**
|
|
19
|
+
* 回调函数名 用于决定调用脚本的哪个函数
|
|
20
|
+
*/
|
|
21
|
+
"func_name": "",
|
|
22
|
+
/**
|
|
23
|
+
* 排序
|
|
24
|
+
*/
|
|
25
|
+
"sort": 10,
|
|
26
|
+
/**
|
|
27
|
+
* 状态, 0表示未启用, 1表示启用
|
|
28
|
+
*/
|
|
29
|
+
"state": 1,
|
|
30
|
+
/**
|
|
31
|
+
* 显示, 0表示不显示, 1表示显示
|
|
32
|
+
*/
|
|
33
|
+
"show": 0
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
/**
|
|
37
|
+
* 名称, 由中英文和下“_”组成, 用于卸载接口 例如: demo
|
|
38
|
+
*/
|
|
39
|
+
"name": "demo3",
|
|
40
|
+
/**
|
|
41
|
+
* 标题, 介绍作用
|
|
42
|
+
*/
|
|
43
|
+
"title": "示例脚本3",
|
|
44
|
+
/**
|
|
45
|
+
* 描述, 用于描述该有什么用的
|
|
46
|
+
*/
|
|
47
|
+
"description": "用于测试动态加载、更新、卸载、删除脚本",
|
|
48
|
+
/**
|
|
49
|
+
* 文件路径, 当调用函数不存在时,会先从文件中加载
|
|
50
|
+
*/
|
|
51
|
+
"func_file": "./after.js",
|
|
52
|
+
/**
|
|
53
|
+
* 回调函数名 用于决定调用脚本的哪个函数
|
|
54
|
+
*/
|
|
55
|
+
"func_name": "main",
|
|
56
|
+
/**
|
|
57
|
+
* 排序
|
|
58
|
+
*/
|
|
59
|
+
"sort": 10,
|
|
60
|
+
/**
|
|
61
|
+
* 状态, 0表示未启用, 1表示启用
|
|
62
|
+
*/
|
|
63
|
+
"state": 1,
|
|
64
|
+
/**
|
|
65
|
+
* 显示, 0表示不显示, 1表示显示
|
|
66
|
+
*/
|
|
67
|
+
"show": 0
|
|
68
68
|
}]
|
package/demo2/test2/main.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
class Demo {
|
|
2
|
-
constructor() {}
|
|
3
|
-
}
|
|
4
|
-
var i = 0;
|
|
5
|
-
Demo.prototype.main = function() {
|
|
6
|
-
console.log("test2 main", i++);
|
|
7
|
-
return i;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
Demo.prototype.init = function() {
|
|
11
|
-
console.log("test2 init");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = new Demo();
|
|
15
|
-
|
|
1
|
+
class Demo {
|
|
2
|
+
constructor() {}
|
|
3
|
+
}
|
|
4
|
+
var i = 0;
|
|
5
|
+
Demo.prototype.main = function() {
|
|
6
|
+
console.log("test2 main", i++);
|
|
7
|
+
return i;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Demo.prototype.init = function() {
|
|
11
|
+
console.log("test2 init");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = new Demo();
|
|
15
|
+
|
|
16
16
|
console.log("引用了test2 main")
|
package/index.js
CHANGED
|
@@ -103,7 +103,7 @@ Index.prototype.Drive = Item;
|
|
|
103
103
|
*/
|
|
104
104
|
Index.prototype.load_item = async function (dir, cg, file) {
|
|
105
105
|
if (!dir || !file) {
|
|
106
|
-
|
|
106
|
+
$.log.error('load_item: 缺少必要参数');
|
|
107
107
|
return null;
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -134,7 +134,7 @@ Index.prototype.load_item = async function (dir, cg, file) {
|
|
|
134
134
|
return json;
|
|
135
135
|
}
|
|
136
136
|
} catch (err) {
|
|
137
|
-
|
|
137
|
+
$.log.error('加载项失败:', err);
|
|
138
138
|
return null;
|
|
139
139
|
}
|
|
140
140
|
};
|
|
@@ -147,7 +147,7 @@ Index.prototype.load_item = async function (dir, cg, file) {
|
|
|
147
147
|
Index.prototype.load_list = async function (list) {
|
|
148
148
|
// 遍历文件路径
|
|
149
149
|
if (!Array.isArray(list)) {
|
|
150
|
-
|
|
150
|
+
$.log.error('load_list: 列表参数必须是数组');
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -172,14 +172,14 @@ Index.prototype.sort = function () {
|
|
|
172
172
|
* 更新前
|
|
173
173
|
*/
|
|
174
174
|
Index.prototype.update_before = async function (dir) {
|
|
175
|
-
//
|
|
175
|
+
// $.log.debug("更新前")
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
179
|
* 更新后
|
|
180
180
|
*/
|
|
181
181
|
Index.prototype.update_after = async function (dir) {
|
|
182
|
-
//
|
|
182
|
+
// $.log.debug("更新后")
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
/**
|
|
@@ -247,7 +247,7 @@ Index.prototype.update_config_have = async function (dir) {
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
} catch (err) {
|
|
250
|
-
|
|
250
|
+
$.log.error(`更新配置失败: ${err.message}`);
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
}
|
|
@@ -271,7 +271,7 @@ Index.prototype.update_config = async function (dir, accurate = false, clear = f
|
|
|
271
271
|
}
|
|
272
272
|
this.sort();
|
|
273
273
|
} catch (err) {
|
|
274
|
-
|
|
274
|
+
$.log.error(`配置更新失败: ${err.message}`);
|
|
275
275
|
}
|
|
276
276
|
};
|
|
277
277
|
|
|
@@ -352,7 +352,7 @@ Index.prototype.save = async function () {
|
|
|
352
352
|
try {
|
|
353
353
|
await o.exec('save');
|
|
354
354
|
} catch (err) {
|
|
355
|
-
|
|
355
|
+
$.log.error(`保存失败: ${err.message}`);
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
358
|
return true;
|
|
@@ -365,7 +365,7 @@ Index.prototype.save = async function () {
|
|
|
365
365
|
*/
|
|
366
366
|
Index.prototype.add = async function (config) {
|
|
367
367
|
if (!config || !config.name) {
|
|
368
|
-
|
|
368
|
+
$.log.error('添加插件失败: 缺少必要的配置信息');
|
|
369
369
|
return null;
|
|
370
370
|
}
|
|
371
371
|
|
|
@@ -373,7 +373,7 @@ Index.prototype.add = async function (config) {
|
|
|
373
373
|
// 检查是否已存在
|
|
374
374
|
const existing = this.get(config.name);
|
|
375
375
|
if (existing) {
|
|
376
|
-
|
|
376
|
+
$.log.warn(`插件 ${config.name} 已存在`);
|
|
377
377
|
return existing;
|
|
378
378
|
}
|
|
379
379
|
|
|
@@ -382,7 +382,7 @@ Index.prototype.add = async function (config) {
|
|
|
382
382
|
this.sort();
|
|
383
383
|
return item;
|
|
384
384
|
} catch (err) {
|
|
385
|
-
|
|
385
|
+
$.log.error(`添加插件失败: ${err.message}`);
|
|
386
386
|
return null;
|
|
387
387
|
}
|
|
388
388
|
};
|
|
@@ -404,7 +404,7 @@ Index.prototype.del = async function (name) {
|
|
|
404
404
|
this.list.splice(index, 1);
|
|
405
405
|
return true;
|
|
406
406
|
} catch (err) {
|
|
407
|
-
|
|
407
|
+
$.log.error(`删除插件失败: ${err.message}`);
|
|
408
408
|
return false;
|
|
409
409
|
}
|
|
410
410
|
};
|
|
@@ -426,7 +426,7 @@ Index.prototype.load = async function (name) {
|
|
|
426
426
|
}
|
|
427
427
|
return item;
|
|
428
428
|
} catch (err) {
|
|
429
|
-
|
|
429
|
+
$.log.error(`加载插件 ${name} 失败: ${err.message}`);
|
|
430
430
|
return null;
|
|
431
431
|
}
|
|
432
432
|
};
|
|
@@ -446,7 +446,7 @@ Index.prototype.unload = async function (name) {
|
|
|
446
446
|
await item.exec('unload');
|
|
447
447
|
return true;
|
|
448
448
|
} catch (err) {
|
|
449
|
-
|
|
449
|
+
$.log.error(`卸载插件 ${name} 失败: ${err.message}`);
|
|
450
450
|
return false;
|
|
451
451
|
}
|
|
452
452
|
};
|
|
@@ -466,7 +466,7 @@ Index.prototype.reload = async function (name) {
|
|
|
466
466
|
await item.exec('reload');
|
|
467
467
|
return item;
|
|
468
468
|
} catch (err) {
|
|
469
|
-
|
|
469
|
+
$.log.error(`重新加载插件 ${name} 失败: ${err.message}`);
|
|
470
470
|
return null;
|
|
471
471
|
}
|
|
472
472
|
};
|
|
@@ -498,7 +498,7 @@ Index.prototype.load_file = async function (file, create = false) {
|
|
|
498
498
|
}
|
|
499
499
|
return null;
|
|
500
500
|
} catch (err) {
|
|
501
|
-
|
|
501
|
+
$.log.error(`加载文件失败: ${err.message}`);
|
|
502
502
|
return `加载文件失败: ${err.message}`;
|
|
503
503
|
}
|
|
504
504
|
};
|
package/package.json
CHANGED
package/test.js
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
var {
|
|
2
|
-
Item,
|
|
3
|
-
Index
|
|
4
|
-
} = require('./index.js');
|
|
5
|
-
|
|
6
|
-
class Drive extends Item {
|
|
7
|
-
constructor(dir, dir_base) {
|
|
8
|
-
super(dir, dir_base);
|
|
9
|
-
this.default_file = "./demo.json";
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
class Engine extends Index {
|
|
14
|
-
constructor(scope, dir_base) {
|
|
15
|
-
super(scope, dir_base);
|
|
16
|
-
/**
|
|
17
|
-
* 模式
|
|
18
|
-
* 1.生产模式,改变文件不会重新加载
|
|
19
|
-
* 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
|
|
20
|
-
* 3.热重载模式,改变配置文件都会加载配置和脚本
|
|
21
|
-
* 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
|
|
22
|
-
* 5.重载模式,执行完后重新加载脚本,避免变量污染
|
|
23
|
-
*/
|
|
24
|
-
this.mode = 3;
|
|
25
|
-
// 机制类型,必须填写,用于检索文件
|
|
26
|
-
this.type = "demo";
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
Engine.prototype.Drive = Drive;
|
|
31
|
-
|
|
32
|
-
async function demo() {
|
|
33
|
-
var engine = new Engine('sys', __dirname);
|
|
34
|
-
console.info("→ 加载mod");
|
|
35
|
-
await engine.update("./".fullname(__dirname));
|
|
36
|
-
|
|
37
|
-
console.log("模块数", engine.list.length);
|
|
38
|
-
// console.log("模块", engine.list);
|
|
39
|
-
|
|
40
|
-
await engine.run('demo1', 'init'); // 只有启动状态的插件才会执行
|
|
41
|
-
await engine.exec('demo1', 'init'); // 未启动也会执行,并且如果未加载脚本则会自动加载
|
|
42
|
-
await engine.run(null, 'main');
|
|
43
|
-
await engine.exec(null, 'main');
|
|
44
|
-
|
|
45
|
-
var ret = await engine.run('demo3', 'main');
|
|
46
|
-
console.log("指明回调demo3", ret);
|
|
47
|
-
|
|
48
|
-
var ret = await engine.exec('demo1', 'main');
|
|
49
|
-
console.log("指明回调demo1", ret);
|
|
50
|
-
|
|
51
|
-
var i = 0;
|
|
52
|
-
var timer = setInterval(async () => {
|
|
53
|
-
await engine.run('demo1', 'main');
|
|
54
|
-
await engine.run('demo2', 'main');
|
|
55
|
-
i++;
|
|
56
|
-
if (i == 3) {
|
|
57
|
-
console.info("→ 重载mod");
|
|
58
|
-
await engine.reload("demo1");
|
|
59
|
-
} else if (i == 5) {
|
|
60
|
-
console.info("→ 卸载mod");
|
|
61
|
-
await engine.unload("demo2");
|
|
62
|
-
} else if (i == 16) {
|
|
63
|
-
console.info("→ 卸载并删除mod");
|
|
64
|
-
await engine.unload("demo1", true);
|
|
65
|
-
} else if (i == 18) {
|
|
66
|
-
clearTimeout(timer);
|
|
67
|
-
}
|
|
68
|
-
}, 3000);
|
|
69
|
-
|
|
70
|
-
setTimeout(async() => {
|
|
71
|
-
var file = "./demo/test1/index.js";
|
|
72
|
-
var text = file.loadText();
|
|
73
|
-
text = text.replace("123", "1234567");
|
|
74
|
-
file.saveText(text);
|
|
75
|
-
var ret = await engine.exec("demo1", 'main');
|
|
76
|
-
console.log("这结果", ret);
|
|
77
|
-
}, 7000)
|
|
78
|
-
|
|
79
|
-
setTimeout(() => {
|
|
80
|
-
var file = "./demo/test2/index.js";
|
|
81
|
-
var text = file.loadText();
|
|
82
|
-
text = text.replace("123", "7654321");
|
|
83
|
-
file.saveText(text);
|
|
84
|
-
}, 11000)
|
|
85
|
-
|
|
86
|
-
setTimeout(async () => {
|
|
87
|
-
// 让热重载失效
|
|
88
|
-
console.info("→ 热重载失效");
|
|
89
|
-
$.mod.config.watch = false;
|
|
90
|
-
// 失效后再加载的模块修改文件没有变化
|
|
91
|
-
var file = "./demo/test1/index.js";
|
|
92
|
-
var text = file.loadText();
|
|
93
|
-
text = text.replace("1234567", "7654321");
|
|
94
|
-
file.saveText(text);
|
|
95
|
-
var ret = await engine.exec("demo1", 'main');
|
|
96
|
-
console.log("这结果", ret);
|
|
97
|
-
}, 16000)
|
|
98
|
-
|
|
99
|
-
var n = 0;
|
|
100
|
-
var timer_2 = setInterval(async () => {
|
|
101
|
-
// await engine.update(null, false, false, false);
|
|
102
|
-
var ret = await engine.exec('demo1', 'main');
|
|
103
|
-
console.info("最后运行demo", ret);
|
|
104
|
-
var plug = engine.get("demo1");
|
|
105
|
-
if (plug) {
|
|
106
|
-
console.log("查看变化1", plug.config);
|
|
107
|
-
}
|
|
108
|
-
var plug = engine.get("demo3");
|
|
109
|
-
if (plug) {
|
|
110
|
-
var ret = await plug.run();
|
|
111
|
-
console.log("查看变化3", plug.config);
|
|
112
|
-
}
|
|
113
|
-
n++;
|
|
114
|
-
if (n == 6) {
|
|
115
|
-
clearInterval(timer_2);
|
|
116
|
-
process.exit(0);
|
|
117
|
-
}
|
|
118
|
-
}, 10000);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/* 调用示例 */
|
|
122
|
-
async function test() {
|
|
123
|
-
'./demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
|
|
124
|
-
setTimeout(() => {
|
|
125
|
-
demo();
|
|
126
|
-
}, 1000)
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
1
|
+
var {
|
|
2
|
+
Item,
|
|
3
|
+
Index
|
|
4
|
+
} = require('./index.js');
|
|
5
|
+
|
|
6
|
+
class Drive extends Item {
|
|
7
|
+
constructor(dir, dir_base) {
|
|
8
|
+
super(dir, dir_base);
|
|
9
|
+
this.default_file = "./demo.json";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class Engine extends Index {
|
|
14
|
+
constructor(scope, dir_base) {
|
|
15
|
+
super(scope, dir_base);
|
|
16
|
+
/**
|
|
17
|
+
* 模式
|
|
18
|
+
* 1.生产模式,改变文件不会重新加载
|
|
19
|
+
* 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
|
|
20
|
+
* 3.热重载模式,改变配置文件都会加载配置和脚本
|
|
21
|
+
* 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
|
|
22
|
+
* 5.重载模式,执行完后重新加载脚本,避免变量污染
|
|
23
|
+
*/
|
|
24
|
+
this.mode = 3;
|
|
25
|
+
// 机制类型,必须填写,用于检索文件
|
|
26
|
+
this.type = "demo";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
Engine.prototype.Drive = Drive;
|
|
31
|
+
|
|
32
|
+
async function demo() {
|
|
33
|
+
var engine = new Engine('sys', __dirname);
|
|
34
|
+
console.info("→ 加载mod");
|
|
35
|
+
await engine.update("./".fullname(__dirname));
|
|
36
|
+
|
|
37
|
+
console.log("模块数", engine.list.length);
|
|
38
|
+
// console.log("模块", engine.list);
|
|
39
|
+
|
|
40
|
+
await engine.run('demo1', 'init'); // 只有启动状态的插件才会执行
|
|
41
|
+
await engine.exec('demo1', 'init'); // 未启动也会执行,并且如果未加载脚本则会自动加载
|
|
42
|
+
await engine.run(null, 'main');
|
|
43
|
+
await engine.exec(null, 'main');
|
|
44
|
+
|
|
45
|
+
var ret = await engine.run('demo3', 'main');
|
|
46
|
+
console.log("指明回调demo3", ret);
|
|
47
|
+
|
|
48
|
+
var ret = await engine.exec('demo1', 'main');
|
|
49
|
+
console.log("指明回调demo1", ret);
|
|
50
|
+
|
|
51
|
+
var i = 0;
|
|
52
|
+
var timer = setInterval(async () => {
|
|
53
|
+
await engine.run('demo1', 'main');
|
|
54
|
+
await engine.run('demo2', 'main');
|
|
55
|
+
i++;
|
|
56
|
+
if (i == 3) {
|
|
57
|
+
console.info("→ 重载mod");
|
|
58
|
+
await engine.reload("demo1");
|
|
59
|
+
} else if (i == 5) {
|
|
60
|
+
console.info("→ 卸载mod");
|
|
61
|
+
await engine.unload("demo2");
|
|
62
|
+
} else if (i == 16) {
|
|
63
|
+
console.info("→ 卸载并删除mod");
|
|
64
|
+
await engine.unload("demo1", true);
|
|
65
|
+
} else if (i == 18) {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
}
|
|
68
|
+
}, 3000);
|
|
69
|
+
|
|
70
|
+
setTimeout(async() => {
|
|
71
|
+
var file = "./demo/test1/index.js";
|
|
72
|
+
var text = file.loadText();
|
|
73
|
+
text = text.replace("123", "1234567");
|
|
74
|
+
file.saveText(text);
|
|
75
|
+
var ret = await engine.exec("demo1", 'main');
|
|
76
|
+
console.log("这结果", ret);
|
|
77
|
+
}, 7000)
|
|
78
|
+
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
var file = "./demo/test2/index.js";
|
|
81
|
+
var text = file.loadText();
|
|
82
|
+
text = text.replace("123", "7654321");
|
|
83
|
+
file.saveText(text);
|
|
84
|
+
}, 11000)
|
|
85
|
+
|
|
86
|
+
setTimeout(async () => {
|
|
87
|
+
// 让热重载失效
|
|
88
|
+
console.info("→ 热重载失效");
|
|
89
|
+
$.mod.config.watch = false;
|
|
90
|
+
// 失效后再加载的模块修改文件没有变化
|
|
91
|
+
var file = "./demo/test1/index.js";
|
|
92
|
+
var text = file.loadText();
|
|
93
|
+
text = text.replace("1234567", "7654321");
|
|
94
|
+
file.saveText(text);
|
|
95
|
+
var ret = await engine.exec("demo1", 'main');
|
|
96
|
+
console.log("这结果", ret);
|
|
97
|
+
}, 16000)
|
|
98
|
+
|
|
99
|
+
var n = 0;
|
|
100
|
+
var timer_2 = setInterval(async () => {
|
|
101
|
+
// await engine.update(null, false, false, false);
|
|
102
|
+
var ret = await engine.exec('demo1', 'main');
|
|
103
|
+
console.info("最后运行demo", ret);
|
|
104
|
+
var plug = engine.get("demo1");
|
|
105
|
+
if (plug) {
|
|
106
|
+
console.log("查看变化1", plug.config);
|
|
107
|
+
}
|
|
108
|
+
var plug = engine.get("demo3");
|
|
109
|
+
if (plug) {
|
|
110
|
+
var ret = await plug.run();
|
|
111
|
+
console.log("查看变化3", plug.config);
|
|
112
|
+
}
|
|
113
|
+
n++;
|
|
114
|
+
if (n == 6) {
|
|
115
|
+
clearInterval(timer_2);
|
|
116
|
+
process.exit(0);
|
|
117
|
+
}
|
|
118
|
+
}, 10000);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* 调用示例 */
|
|
122
|
+
async function test() {
|
|
123
|
+
'./demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
|
|
124
|
+
setTimeout(() => {
|
|
125
|
+
demo();
|
|
126
|
+
}, 1000)
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
130
|
test();
|