UNPKG

mm_machine

Version:

这是超级美眉框架机制构建辅助模块,用于快速构建一个机制

130 lines (115 loc) 3.6 kB
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();