mm_machine 1.8.8 → 1.9.0
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/demo/test1/demo.json +1 -1
- package/demo/test2/demo.json +1 -1
- package/index.js +124 -33
- package/package.json +1 -1
- package/test.js +22 -7
package/demo/test1/demo.json
CHANGED
package/demo/test2/demo.json
CHANGED
package/index.js
CHANGED
|
@@ -83,6 +83,15 @@ class Item {
|
|
|
83
83
|
* 模块目录
|
|
84
84
|
*/
|
|
85
85
|
this.dir_base = dir_base;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 模式
|
|
89
|
+
* 1.生产模式,改变文件不会重新加载
|
|
90
|
+
* 2.热更新模式,改变文件重新加载
|
|
91
|
+
* 3.重载模式,执行完后重新加载,避免变量污染
|
|
92
|
+
* 4.热更新+重载模式,改变文件重新加载,执行完后重新加载
|
|
93
|
+
*/
|
|
94
|
+
this.mode = 1;
|
|
86
95
|
}
|
|
87
96
|
}
|
|
88
97
|
|
|
@@ -140,7 +149,6 @@ Item.prototype.unloadObj = function(file) {
|
|
|
140
149
|
this.remove_module(file || this.config.func_file.fullname(this.dir));
|
|
141
150
|
}
|
|
142
151
|
|
|
143
|
-
|
|
144
152
|
/**
|
|
145
153
|
* 卸载
|
|
146
154
|
* @param {Boolean} remove 是否删除文件
|
|
@@ -166,9 +174,14 @@ Item.prototype.loadObj = function(config) {
|
|
|
166
174
|
var f = config.func_file;
|
|
167
175
|
if (f) {
|
|
168
176
|
var file = f.fullname(this.dir);
|
|
169
|
-
if (file.hasFile()) {
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
if (!file.hasFile()) {
|
|
178
|
+
this.new_script(file);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var name = config.func_name;
|
|
182
|
+
var cs;
|
|
183
|
+
if (this.mode === 2 || this.mode === 4) {
|
|
184
|
+
cs = $.require(file, (cs, way) => {
|
|
172
185
|
if (way == "change" && cs) {
|
|
173
186
|
if (name) {
|
|
174
187
|
this.main = cs[name];
|
|
@@ -177,15 +190,15 @@ Item.prototype.loadObj = function(config) {
|
|
|
177
190
|
}
|
|
178
191
|
}
|
|
179
192
|
});
|
|
180
|
-
if (cs) {
|
|
181
|
-
if (name) {
|
|
182
|
-
this.main = cs[name];
|
|
183
|
-
} else {
|
|
184
|
-
$.push(this, cs, true);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
193
|
} else {
|
|
188
|
-
|
|
194
|
+
cs = require(file);
|
|
195
|
+
}
|
|
196
|
+
if (cs) {
|
|
197
|
+
if (name) {
|
|
198
|
+
this.main = cs[name];
|
|
199
|
+
} else {
|
|
200
|
+
$.push(this, cs, true);
|
|
201
|
+
}
|
|
189
202
|
}
|
|
190
203
|
}
|
|
191
204
|
this.load_after();
|
|
@@ -203,25 +216,54 @@ Item.prototype.new_config = function(file) {
|
|
|
203
216
|
/**
|
|
204
217
|
* 加载配置文件
|
|
205
218
|
* @param {String} file 文件路径
|
|
219
|
+
* @param {String} name 配置项名称
|
|
206
220
|
* @return {Object} 配置对象
|
|
207
221
|
*/
|
|
208
|
-
Item.prototype.loadFile = function(file) {
|
|
209
|
-
var
|
|
222
|
+
Item.prototype.loadFile = function(file, name) {
|
|
223
|
+
var config;
|
|
210
224
|
var f = file.fullname(this.dir);
|
|
211
225
|
var text = f.loadText();
|
|
212
226
|
if (!text) {
|
|
213
227
|
this.new_config(f);
|
|
214
228
|
}
|
|
215
229
|
if (text) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
230
|
+
if (this.mode === 2 || this.mode === 4) {
|
|
231
|
+
config = $.loadJson(f, (conf, way) => {
|
|
232
|
+
if (way == "change" && conf) {
|
|
233
|
+
if (Array.isArray(conf)) {
|
|
234
|
+
var list = conf;
|
|
235
|
+
for (var i = 0; i < list.length; i++) {
|
|
236
|
+
var o = list[i];
|
|
237
|
+
if (this.config.name === o.name) {
|
|
238
|
+
this.set_config(o);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
this.set_config(conf);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
} else {
|
|
248
|
+
config = f.loadJson();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (name) {
|
|
252
|
+
if (Array.isArray(config)) {
|
|
253
|
+
var list = config;
|
|
254
|
+
for (var i = 0; i < list.length; i++) {
|
|
255
|
+
var o = list[i];
|
|
256
|
+
if (name === o.name) {
|
|
257
|
+
config = o;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
219
261
|
}
|
|
220
|
-
}
|
|
262
|
+
}
|
|
221
263
|
}
|
|
222
264
|
this.dir = f.dirname();
|
|
223
265
|
this.filename = f;
|
|
224
|
-
return
|
|
266
|
+
return config;
|
|
225
267
|
};
|
|
226
268
|
|
|
227
269
|
/**
|
|
@@ -229,7 +271,7 @@ Item.prototype.loadFile = function(file) {
|
|
|
229
271
|
*/
|
|
230
272
|
Item.prototype.reload = function() {
|
|
231
273
|
this.unloadObj();
|
|
232
|
-
this.load(this.filename);
|
|
274
|
+
this.load(this.filename, this.config.name);
|
|
233
275
|
}
|
|
234
276
|
|
|
235
277
|
/**
|
|
@@ -284,11 +326,12 @@ Item.prototype.remove_file = function() {
|
|
|
284
326
|
/**
|
|
285
327
|
* 载入配置
|
|
286
328
|
* @param {Object|String} cg 配置对象或配置路径
|
|
329
|
+
* @param {String} name 配置名称
|
|
287
330
|
*/
|
|
288
|
-
Item.prototype.load = function(cg) {
|
|
331
|
+
Item.prototype.load = function(cg, name) {
|
|
289
332
|
var config;
|
|
290
333
|
if (typeof(cg) === "string") {
|
|
291
|
-
config = this.loadFile(cg);
|
|
334
|
+
config = this.loadFile(cg, name);
|
|
292
335
|
} else {
|
|
293
336
|
config = cg;
|
|
294
337
|
}
|
|
@@ -426,9 +469,13 @@ class Index {
|
|
|
426
469
|
this.dir_base = dir_base;
|
|
427
470
|
|
|
428
471
|
/**
|
|
429
|
-
* 模式
|
|
472
|
+
* 模式
|
|
473
|
+
* 1.生产模式,改变文件不会重新加载
|
|
474
|
+
* 2.热更新模式,改变文件重新加载
|
|
475
|
+
* 3.重载模式,执行完后重新加载,避免变量污染
|
|
476
|
+
* 4.热更新+重载模式,改变文件重新加载,执行完后重新加载
|
|
430
477
|
*/
|
|
431
|
-
this.mode =
|
|
478
|
+
this.mode = 1;
|
|
432
479
|
}
|
|
433
480
|
}
|
|
434
481
|
|
|
@@ -454,9 +501,15 @@ Index.prototype.load_item = function(dir, cg, file) {
|
|
|
454
501
|
if (this.Drive) {
|
|
455
502
|
var drive = new this.Drive(dir);
|
|
456
503
|
if (cg) {
|
|
457
|
-
|
|
458
|
-
|
|
504
|
+
if (this.mode < 3) {
|
|
505
|
+
drive.mode = this.mode;
|
|
506
|
+
} else {
|
|
507
|
+
drive.mode = 2;
|
|
508
|
+
}
|
|
509
|
+
drive.load(file);
|
|
510
|
+
drive.set_config(cg);
|
|
459
511
|
} else {
|
|
512
|
+
drive.mode = this.mode;
|
|
460
513
|
drive.load(file);
|
|
461
514
|
}
|
|
462
515
|
this.list.push(drive);
|
|
@@ -550,22 +603,60 @@ Index.prototype.update_after = async function(dir) {
|
|
|
550
603
|
// console.log("更新后")
|
|
551
604
|
}
|
|
552
605
|
|
|
606
|
+
/**
|
|
607
|
+
* 更新配置
|
|
608
|
+
* @param {Object} dir
|
|
609
|
+
*/
|
|
610
|
+
Index.prototype.update_config = async function(dir) {
|
|
611
|
+
if (!dir) {
|
|
612
|
+
var list = this.list;
|
|
613
|
+
for (var i = 0; i < list.length; i++) {
|
|
614
|
+
var o = list[i];
|
|
615
|
+
var file = o.filename;
|
|
616
|
+
if (file) {
|
|
617
|
+
var config = file.loadJson();
|
|
618
|
+
if (config) {
|
|
619
|
+
if (Array.isArray(config)) {
|
|
620
|
+
var lt = config;
|
|
621
|
+
for (var n = 0; n < lt.length; n++) {
|
|
622
|
+
var cg = lt[n];
|
|
623
|
+
if (cg.name == o.config.name) {
|
|
624
|
+
o.set_config(cg);
|
|
625
|
+
continue;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
} else {
|
|
629
|
+
o.set_config(config);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
|
|
553
637
|
/**
|
|
554
638
|
* 更新
|
|
639
|
+
* @param {String} dir 检索的路径
|
|
640
|
+
* @param {Boolean} loadJS 是否加载JS
|
|
555
641
|
*/
|
|
556
|
-
Index.prototype.update_main = async function(dir) {
|
|
557
|
-
|
|
558
|
-
|
|
642
|
+
Index.prototype.update_main = async function(dir, loadJS = true) {
|
|
643
|
+
if (loadJS) {
|
|
644
|
+
this.clear();
|
|
645
|
+
this.load(dir);
|
|
646
|
+
} else {
|
|
647
|
+
this.update_config(dir);
|
|
648
|
+
}
|
|
559
649
|
this.sort();
|
|
560
650
|
}
|
|
561
651
|
|
|
562
652
|
/**
|
|
563
653
|
* 更新配置
|
|
564
654
|
* @param {String} dir 检索的路径
|
|
655
|
+
* @param {Boolean} loadJS 是否加载JS
|
|
565
656
|
*/
|
|
566
|
-
Index.prototype.update = async function(dir) {
|
|
657
|
+
Index.prototype.update = async function(dir, loadJS = true) {
|
|
567
658
|
await this.update_before(dir);
|
|
568
|
-
await this.update_main(dir);
|
|
659
|
+
await this.update_main(dir, loadJS);
|
|
569
660
|
await this.update_after(dir);
|
|
570
661
|
};
|
|
571
662
|
|
|
@@ -783,7 +874,7 @@ Index.prototype.run = async function(name, method, ...params) {
|
|
|
783
874
|
} else {
|
|
784
875
|
result = ret;
|
|
785
876
|
}
|
|
786
|
-
if (this.mode) {
|
|
877
|
+
if (this.mode > 2) {
|
|
787
878
|
o.reload();
|
|
788
879
|
}
|
|
789
880
|
}
|
|
@@ -822,7 +913,7 @@ Index.prototype.exec = async function(name, method, ...params) {
|
|
|
822
913
|
} else {
|
|
823
914
|
result = ret;
|
|
824
915
|
}
|
|
825
|
-
if (this.mode) {
|
|
916
|
+
if (this.mode > 2) {
|
|
826
917
|
o.reload();
|
|
827
918
|
}
|
|
828
919
|
}
|
package/package.json
CHANGED
package/test.js
CHANGED
|
@@ -13,8 +13,14 @@ class Drive extends Item {
|
|
|
13
13
|
class Engine extends Index {
|
|
14
14
|
constructor(scope, dir_base) {
|
|
15
15
|
super(scope, dir_base);
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* 模式
|
|
18
|
+
* 1.不更新重载模式,改变文件不会重新加载,执行完后也不会重新加载
|
|
19
|
+
* 2.热更新模式,改变文件重新加载
|
|
20
|
+
* 3.重载模式,执行完后重新加载,避免变量污染
|
|
21
|
+
* 4.热更新+重载模式,改变文件重新加载,执行完后重新加载
|
|
22
|
+
*/
|
|
23
|
+
this.mode = 0;
|
|
18
24
|
// 机制类型,必须填写,用于检索文件
|
|
19
25
|
this.type = "demo";
|
|
20
26
|
}
|
|
@@ -35,10 +41,10 @@ async function demo() {
|
|
|
35
41
|
if (plug) {
|
|
36
42
|
plug.loadFile(plug.filename);
|
|
37
43
|
}
|
|
38
|
-
|
|
44
|
+
|
|
39
45
|
var i = await engine.run('demo3', 'main');
|
|
40
46
|
console.log("指明回调demo3", i);
|
|
41
|
-
|
|
47
|
+
|
|
42
48
|
// console.log("模块数", engine.list.length);
|
|
43
49
|
|
|
44
50
|
// var i = 0;
|
|
@@ -86,10 +92,19 @@ async function demo() {
|
|
|
86
92
|
// file.saveText(text);
|
|
87
93
|
// }, 26000)
|
|
88
94
|
|
|
89
|
-
setInterval(() => {
|
|
95
|
+
// setInterval(() => {
|
|
96
|
+
// var plug = engine.get("demo1");
|
|
97
|
+
// console.log("查看变化1", plug.config);
|
|
98
|
+
// var plug = engine.get("demo3");
|
|
99
|
+
// console.log("查看变化3", plug.config);
|
|
100
|
+
// }, 3000);
|
|
101
|
+
setTimeout(async() => {
|
|
102
|
+
await engine.update(null, false);
|
|
90
103
|
var plug = engine.get("demo1");
|
|
91
|
-
console.log("查看变化", plug);
|
|
92
|
-
|
|
104
|
+
console.log("查看变化1", plug.config);
|
|
105
|
+
var plug = engine.get("demo3");
|
|
106
|
+
console.log("查看变化3", plug.config);
|
|
107
|
+
}, 10000);
|
|
93
108
|
}
|
|
94
109
|
|
|
95
110
|
/* 调用示例 */
|