mm_machine
Version:
这是超级美眉框架机制构建辅助模块,用于快速构建一个机制
130 lines (115 loc) • 3.6 kB
JavaScript
var {
Item,
Index
} = require('./index.js');
class Drive extends Item {
constructor(dir, dir_base) {
super(dir, dir_base);
this.default_file = "./demo.json";
}
}
class Engine extends Index {
constructor(scope, dir_base) {
super(scope, dir_base);
/**
* 模式
* 1.生产模式,改变文件不会重新加载
* 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
* 3.热重载模式,改变配置文件都会加载配置和脚本
* 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
* 5.重载模式,执行完后重新加载脚本,避免变量污染
*/
this.mode = 3;
// 机制类型,必须填写,用于检索文件
this.type = "demo";
}
}
Engine.prototype.Drive = Drive;
async function demo() {
var engine = new Engine('sys', __dirname);
console.info("→ 加载mod");
await engine.update("./".fullname(__dirname));
console.log("模块数", engine.list.length);
// console.log("模块", engine.list);
await engine.run('demo1', 'init'); // 只有启动状态的插件才会执行
await engine.exec('demo1', 'init'); // 未启动也会执行,并且如果未加载脚本则会自动加载
await engine.run(null, 'main');
await engine.exec(null, 'main');
var ret = await engine.run('demo3', 'main');
console.log("指明回调demo3", ret);
var ret = await engine.exec('demo1', 'main');
console.log("指明回调demo1", ret);
var i = 0;
var timer = setInterval(async () => {
await engine.run('demo1', 'main');
await engine.run('demo2', 'main');
i++;
if (i == 3) {
console.info("→ 重载mod");
await engine.reload("demo1");
} else if (i == 5) {
console.info("→ 卸载mod");
await engine.unload("demo2");
} else if (i == 16) {
console.info("→ 卸载并删除mod");
await engine.unload("demo1", true);
} else if (i == 18) {
clearTimeout(timer);
}
}, 3000);
setTimeout(async() => {
var file = "./demo/test1/index.js";
var text = file.loadText();
text = text.replace("123", "1234567");
file.saveText(text);
var ret = await engine.exec("demo1", 'main');
console.log("这结果", ret);
}, 7000)
setTimeout(() => {
var file = "./demo/test2/index.js";
var text = file.loadText();
text = text.replace("123", "7654321");
file.saveText(text);
}, 11000)
setTimeout(async () => {
// 让热重载失效
console.info("→ 热重载失效");
$.mod.config.watch = false;
// 失效后再加载的模块修改文件没有变化
var file = "./demo/test1/index.js";
var text = file.loadText();
text = text.replace("1234567", "7654321");
file.saveText(text);
var ret = await engine.exec("demo1", 'main');
console.log("这结果", ret);
}, 16000)
var n = 0;
var timer_2 = setInterval(async () => {
// await engine.update(null, false, false, false);
var ret = await engine.exec('demo1', 'main');
console.info("最后运行demo", ret);
var plug = engine.get("demo1");
if (plug) {
console.log("查看变化1", plug.config);
}
var plug = engine.get("demo3");
if (plug) {
var ret = await plug.run();
console.log("查看变化3", plug.config);
}
n++;
if (n == 6) {
clearInterval(timer_2);
process.exit(0);
}
}, 10000);
}
/* 调用示例 */
async function test() {
'./demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
setTimeout(() => {
demo();
}, 1000)
});
}
test();