mm_machine 2.0.1 → 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 -210
- package/app/test1/config_demo.json +10 -0
- package/app/test1/demo.json +10 -0
- package/app/test1/index.js +30 -0
- package/app/test2/after.js +6 -0
- package/app/test2/config_demo.json +10 -0
- package/app/test2/demo.json +10 -0
- package/app/test2/main.js +18 -0
- package/demo/test1/config_demo.json +34 -0
- 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 +68 -0
- 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 +319 -324
- package/item.js +327 -240
- package/package.json +8 -5
- package/test.js +129 -129
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mm_machine",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.3",
|
|
4
|
+
"description": "这是超级美眉框架机制构建辅助模块,用于快速构建一个机制,支持动态加载、热更新、模块管理等功能,并具有增强的错误处理和现代JavaScript特性支持。",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "node ./test.js",
|
|
@@ -21,7 +21,10 @@
|
|
|
21
21
|
"get",
|
|
22
22
|
"set",
|
|
23
23
|
"add",
|
|
24
|
-
"del"
|
|
24
|
+
"del",
|
|
25
|
+
"hot-reload",
|
|
26
|
+
"module-management",
|
|
27
|
+
"modern-js"
|
|
25
28
|
],
|
|
26
29
|
"author": "邱文武",
|
|
27
30
|
"license": "ISC",
|
|
@@ -30,7 +33,7 @@
|
|
|
30
33
|
},
|
|
31
34
|
"homepage": "https://gitee.com/qiuwenwu91/mm_machine#readme",
|
|
32
35
|
"dependencies": {
|
|
33
|
-
"mm_config": "^
|
|
34
|
-
"mm_hot_reload": "^1.
|
|
36
|
+
"mm_config": "^2.1.3",
|
|
37
|
+
"mm_hot_reload": "^1.1.3"
|
|
35
38
|
}
|
|
36
39
|
}
|
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();
|