mm_machine 2.1.1 → 2.1.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.
@@ -3,18 +3,21 @@
3
3
  ## 1. index.js - Index类方法
4
4
 
5
5
  ### 构造函数
6
+
6
7
  - **constructor(scope, dir_base)** - 初始化Index类实例
7
8
  - `scope`: 作用域(同时作为检索的后缀名)
8
9
  - `dir_base`: 模块目录
9
10
 
10
11
  ### 私有方法
11
- - **_execute(module, method, params)** - 执行模块方法
12
+
13
+ - **\_execute(module, method, params)** - 执行模块方法
12
14
  - `module`: 模块对象
13
15
  - `method`: 方法名称
14
16
  - `params`: 参数数组
15
17
  - 返回: Promise<any> - 执行结果
16
18
 
17
19
  ### 公共方法
20
+
18
21
  - **clear()** - 清除接口缓存
19
22
  - **load(dir, cg, file)** - 加载项
20
23
  - `dir`: 文件路径
@@ -94,20 +97,24 @@
94
97
  - 返回: Promise<any> - 执行结果
95
98
 
96
99
  ### 属性
100
+
97
101
  - **Drive** - 默认驱动类,指向Item类
98
102
 
99
103
  ## 2. item.js - Item类方法
100
104
 
101
105
  ### 构造函数
106
+
102
107
  - **constructor(dir, dir_base)** - 初始化Item类实例
103
108
  - `dir`: 当前目录
104
109
  - `dir_base`: 模块目录
105
110
 
106
111
  ### 私有方法
107
- - **_remove(module)** - 移除模块
112
+
113
+ - **\_remove(module)** - 移除模块
108
114
  - `module`: 模块对象或路径
109
115
 
110
116
  ### 公共方法
117
+
111
118
  - **setConfig(config)** - 设置配置
112
119
  - `config`: 配置对象
113
120
  - **setConfig_after()** - 设置配置后钩子方法
@@ -165,6 +172,7 @@
165
172
  ## 方法命名规范检查
166
173
 
167
174
  ### 符合规范的方法名(小驼峰)
175
+
168
176
  - clear
169
177
  - load
170
178
  - loads
@@ -195,6 +203,7 @@
195
203
  - main
196
204
 
197
205
  ### 符合规范的时态方法名
206
+
198
207
  - update_before
199
208
  - update_after
200
209
  - setConfig_after
@@ -202,13 +211,15 @@
202
211
  - load_before
203
212
 
204
213
  ### 需要注意的方法名
214
+
205
215
  - **updateScript** - 已从update_script修改为符合小驼峰命名规范
206
- - **update_main** - 保持不变,因为_main属于时态方法命名格式(main表示主逻辑)
216
+ - **update_main** - 保持不变,因为\_main属于时态方法命名格式(main表示主逻辑)
207
217
 
208
218
  ## 重复方法名
209
219
 
210
220
  在index.js中发现两个同名的load方法:
221
+
211
222
  1. `load(dir, cg, file)` - 加载项
212
223
  2. `load(name)` - 加载插件
213
224
 
214
- 建议重命名其中一个以避免混淆。
225
+ 建议重命名其中一个以避免混淆。
package/nodemon.json CHANGED
@@ -1,26 +1,25 @@
1
- {
2
- "restartable": "rs",
3
- "ignore": [
4
- ".git",
5
- ".svn",
6
- "node_modules/**/node_modules",
7
- "static/src/*",
8
- "static/js/*",
9
- "static/**/js",
10
- "static/*.js",
11
- "*data.json",
12
- "*cache.json"
13
- ],
14
- "verbose": true,
15
- "execMap": {
16
- "": "node",
17
- "js": "node --harmony"
18
- },
19
- "watch": [
20
- ],
21
- "env": {
22
- "NODE_ENV": "development"
23
- },
24
- "ext": "js json",
25
- "legacy-watch": false
26
- }
1
+ {
2
+ "restartable": "rs",
3
+ "ignore": [
4
+ ".git",
5
+ ".svn",
6
+ "node_modules/**/node_modules",
7
+ "static/src/*",
8
+ "static/js/*",
9
+ "static/**/js",
10
+ "static/*.js",
11
+ "*data.json",
12
+ "*cache.json"
13
+ ],
14
+ "verbose": true,
15
+ "execMap": {
16
+ "": "node",
17
+ "js": "node --harmony"
18
+ },
19
+ "watch": [],
20
+ "env": {
21
+ "NODE_ENV": "development"
22
+ },
23
+ "ext": "js json",
24
+ "legacy-watch": false
25
+ }
package/package.json CHANGED
@@ -1,39 +1,49 @@
1
- {
2
- "name": "mm_machine",
3
- "version": "2.1.1",
4
- "description": "这是超级美眉框架机制构建辅助模块,用于快速构建一个机制,支持动态加载、热更新、模块管理等功能,并具有增强的错误处理和现代JavaScript特性支持。",
5
- "main": "index.js",
6
- "scripts": {
7
- "test": "node ./test.js",
8
- "dev": "nodemon ./test.js"
9
- },
10
- "repository": {
11
- "type": "git",
12
- "url": "git+https://gitee.com/qiuwenwu91/mm_machine.git"
13
- },
14
- "keywords": [
15
- "common",
16
- "com",
17
- "run",
18
- "cmd",
19
- "load",
20
- "save",
21
- "get",
22
- "set",
23
- "add",
24
- "del",
25
- "hot-reload",
26
- "module-management",
27
- "modern-js"
28
- ],
29
- "author": "邱文武",
30
- "license": "ISC",
31
- "bugs": {
32
- "url": "https://gitee.com/qiuwenwu91/mm_machine/issues"
33
- },
34
- "homepage": "https://gitee.com/qiuwenwu91/mm_machine#readme",
35
- "dependencies": {
36
- "mm_config": "^2.1.3",
37
- "mm_hot_reload": "^1.1.3"
38
- }
39
- }
1
+ {
2
+ "name": "mm_machine",
3
+ "version": "2.1.3",
4
+ "description": "这是超级美眉框架机制构建辅助模块,用于快速构建一个机制,支持动态加载、热更新、模块管理等功能,并具有增强的错误处理和现代JavaScript特性支持。",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "node ./test.js",
8
+ "dev": "nodemon ./test.js",
9
+ "lint": "eslint .",
10
+ "lint:fix": "eslint . --fix",
11
+ "format": "prettier --write .",
12
+ "format:check": "prettier --check ."
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://gitee.com/qiuwenwu91/mm_machine.git"
17
+ },
18
+ "keywords": [
19
+ "common",
20
+ "com",
21
+ "run",
22
+ "cmd",
23
+ "load",
24
+ "save",
25
+ "get",
26
+ "set",
27
+ "add",
28
+ "del",
29
+ "hot-reload",
30
+ "module-management",
31
+ "modern-js"
32
+ ],
33
+ "author": "邱文武",
34
+ "license": "ISC",
35
+ "bugs": {
36
+ "url": "https://gitee.com/qiuwenwu91/mm_machine/issues"
37
+ },
38
+ "homepage": "https://gitee.com/qiuwenwu91/mm_machine#readme",
39
+ "dependencies": {
40
+ "mm_config": "^2.1.9",
41
+ "mm_hot_reload": "^1.1.4"
42
+ },
43
+ "devDependencies": {
44
+ "eslint": "^9.39.2",
45
+ "eslint-plugin-jsdoc": "^61.5.0",
46
+ "mm_eslint": "^1.4.0",
47
+ "prettier": "^3.7.4"
48
+ }
49
+ }
package/test ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "a": 1
3
+ }
package/test.js CHANGED
@@ -1,30 +1,27 @@
1
- var {
2
- Item,
3
- Index
4
- } = require('./index.js');
1
+ var { Item, Index } = require('./index.js');
5
2
 
6
3
  class Drive extends Item {
7
- constructor(dir, dir_base) {
8
- super(dir, dir_base);
9
- this.default_file = "./demo.json";
10
- }
4
+ constructor(dir, dir_base) {
5
+ super(dir, dir_base);
6
+ this.default_file = './demo.json';
7
+ }
11
8
  }
12
9
 
13
10
  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
- }
11
+ constructor(scope, dir_base) {
12
+ super(scope, dir_base);
13
+ /**
14
+ * 模式
15
+ * 1.生产模式,改变文件不会重新加载
16
+ * 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
17
+ * 3.热重载模式,改变配置文件都会加载配置和脚本
18
+ * 4.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
19
+ * 5.重载模式,执行完后重新加载脚本,避免变量污染
20
+ */
21
+ this.mode = 3;
22
+ // 机制类型,必须填写,用于检索文件
23
+ this.type = 'demo';
24
+ }
28
25
  }
29
26
 
30
27
  /**
@@ -33,102 +30,122 @@ class Engine extends Index {
33
30
  */
34
31
  Engine.prototype.Drive = Drive;
35
32
 
36
- async function demo() {
37
- var engine = new Engine('sys', __dirname);
38
- console.info("→ 加载mod");
39
- await engine.update("./app/".fullname(__dirname));
33
+ async function initEngine() {
34
+ var engine = new Engine('sys', __dirname);
35
+ console.info('→ 加载mod');
36
+ await engine.update('./app/'.fullname(__dirname));
37
+ console.log('模块数', engine.list.length);
38
+ return engine;
39
+ }
40
40
 
41
- console.log("模块数", engine.list.length);
42
- // console.log("模块", engine.list);
41
+ async function runBasicTests(engine) {
42
+ await engine.run('test1', 'init');
43
+ await engine.exec('test1', 'init');
44
+ await engine.run(null, 'main');
45
+ await engine.exec(null, 'main');
43
46
 
44
- await engine.run('test1', 'init'); // 只有启动状态的插件才会执行
45
- await engine.exec('test1', 'init'); // 未启动也会执行,并且如果未加载脚本则会自动加载
46
- await engine.run(null, 'main');
47
- await engine.exec(null, 'main');
47
+ var ret = await engine.run('test2', 'main');
48
+ console.log('指明回调test2', ret);
49
+
50
+ var ret = await engine.exec('test1', 'main');
51
+ console.log('指明回调test1', ret);
52
+ }
48
53
 
49
- var ret = await engine.run('test2', 'main');
50
- console.log("指明回调test2", ret);
54
+ function setupMainTimer(engine) {
55
+ var i = 0;
56
+ var timer = setInterval(async () => {
57
+ await engine.run('test1', 'main');
58
+ await engine.run('test2', 'main');
59
+ i++;
60
+ if (i == 3) {
61
+ console.info('→ 重载mod');
62
+ await engine.reload('test1');
63
+ } else if (i == 5) {
64
+ console.info('→ 卸载mod');
65
+ await engine.unload('test2');
66
+ } else if (i == 16) {
67
+ console.info('→ 卸载并删除mod');
68
+ await engine.unload('test1', true);
69
+ } else if (i == 18) {
70
+ clearTimeout(timer);
71
+ }
72
+ }, 3000);
73
+ return timer;
74
+ }
51
75
 
52
- var ret = await engine.exec('test1', 'main');
53
- console.log("指明回调test1", ret);
76
+ function setupFileMods(engine) {
77
+ setTimeout(async () => {
78
+ var file = './app/test1/index.js'.fullname(__dirname);
79
+ if (file.hasFile()) {
80
+ var text = file.loadText();
81
+ text = text.replace('counter = 0', 'counter = 100');
82
+ file.saveText(text);
83
+ var ret = await engine.exec('test1', 'main');
84
+ console.log('这结果', ret);
85
+ }
86
+ }, 7000);
54
87
 
55
- var i = 0;
56
- var timer = setInterval(async () => {
57
- await engine.run('test1', 'main');
58
- await engine.run('test2', 'main');
59
- i++;
60
- if (i == 3) {
61
- console.info("→ 重载mod");
62
- await engine.reload("test1");
63
- } else if (i == 5) {
64
- console.info("→ 卸载mod");
65
- await engine.unload("test2");
66
- } else if (i == 16) {
67
- console.info("→ 卸载并删除mod");
68
- await engine.unload("test1", true);
69
- } else if (i == 18) {
70
- clearTimeout(timer);
71
- }
72
- }, 3000);
88
+ setTimeout(() => {
89
+ var file = './demo/test2/index.js'.fullname(__dirname);
90
+ if (file.hasFile()) {
91
+ var text = file.loadText();
92
+ text = text.replace('123', '7654321');
93
+ file.saveText(text);
94
+ }
95
+ }, 11000);
73
96
 
74
- setTimeout(async() => {
75
- var file = "./app/test1/index.js";
76
- var text = file.loadText();
77
- text = text.replace("counter = 0", "counter = 100");
78
- file.saveText(text);
79
- var ret = await engine.exec("test1", 'main');
80
- console.log("这结果", ret);
81
- }, 7000)
97
+ setTimeout(async () => {
98
+ console.info('→ 热重载失效');
99
+ $.mod.config.watch = false;
100
+ var file = './app/test1/index.js'.fullname(__dirname);
101
+ if (file.hasFile()) {
102
+ var text = file.loadText();
103
+ text = text.replace('counter = 100', 'counter = 200');
104
+ file.saveText(text);
105
+ var ret = await engine.exec('test1', 'main');
106
+ console.log('这结果', ret);
107
+ }
108
+ }, 16000);
109
+ }
82
110
 
83
- setTimeout(() => {
84
- var file = "./demo/test2/index.js";
85
- var text = file.loadText();
86
- text = text.replace("123", "7654321");
87
- file.saveText(text);
88
- }, 11000)
111
+ function setupFinalTimer(engine) {
112
+ var n = 0;
113
+ var timer_2 = setInterval(async () => {
114
+ var ret = await engine.exec('test1', 'main');
115
+ console.info('最后运行test1', ret);
116
+ var plug = engine.get('test1');
117
+ if (plug) {
118
+ console.log('查看变化1', plug.config);
119
+ }
120
+ var plug = engine.get('test2');
121
+ if (plug) {
122
+ var ret = await plug.run();
123
+ console.log('查看变化2', plug.config);
124
+ }
125
+ n++;
126
+ if (n == 6) {
127
+ clearInterval(timer_2);
128
+ process.exit(0);
129
+ }
130
+ }, 10000);
131
+ return timer_2;
132
+ }
89
133
 
90
- setTimeout(async () => {
91
- // 让热重载失效
92
- console.info("→ 热重载失效");
93
- $.mod.config.watch = false;
94
- // 失效后再加载的模块修改文件没有变化
95
- var file = "./app/test1/index.js";
96
- var text = file.loadText();
97
- text = text.replace("counter = 100", "counter = 200");
98
- file.saveText(text);
99
- var ret = await engine.exec("test1", 'main');
100
- console.log("这结果", ret);
101
- }, 16000)
102
-
103
- var n = 0;
104
- var timer_2 = setInterval(async () => {
105
- // await engine.update(null, false, false, false);
106
- var ret = await engine.exec('test1', 'main');
107
- console.info("最后运行test1", ret);
108
- var plug = engine.get("test1");
109
- if (plug) {
110
- console.log("查看变化1", plug.config);
111
- }
112
- var plug = engine.get("test2");
113
- if (plug) {
114
- var ret = await plug.run();
115
- console.log("查看变化2", plug.config);
116
- }
117
- n++;
118
- if (n == 6) {
119
- clearInterval(timer_2);
120
- process.exit(0);
121
- }
122
- }, 10000);
134
+ async function demo() {
135
+ var engine = await initEngine();
136
+ await runBasicTests(engine);
137
+ setupMainTimer(engine);
138
+ setupFileMods(engine);
139
+ setupFinalTimer(engine);
123
140
  }
124
141
 
125
142
  /* 调用示例 */
126
143
  async function test() {
127
- './demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
128
- setTimeout(() => {
129
- demo();
130
- }, 1000)
131
- });
144
+ './demo2'.fullname(__dirname).copyDir('./demo'.fullname(__dirname), () => {
145
+ setTimeout(() => {
146
+ demo();
147
+ }, 1000);
148
+ });
132
149
  }
133
150
 
134
- test();
151
+ test();
package/test.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "test1",
3
+ "sort": 10,
4
+ "state": 1,
5
+ "show": 1,
6
+ "SORT": 10,
7
+ "STATE": 1,
8
+ "SHOW": 0
9
+ }