@yumerijs/loader 1.0.6 → 1.0.7
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/dist/index.d.ts +1 -7
- package/dist/index.js +11 -77
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ declare class PluginLoader {
|
|
|
8
8
|
private config;
|
|
9
9
|
private isDev;
|
|
10
10
|
private pluginsDir;
|
|
11
|
+
private logger;
|
|
11
12
|
constructor(core?: Core, config?: Config, pluginsDir?: string);
|
|
12
13
|
setCoreAndConfig(core: Core, config: Config): void;
|
|
13
14
|
/**
|
|
@@ -45,12 +46,5 @@ declare class PluginLoader {
|
|
|
45
46
|
* @param pluginPath 插件路径.
|
|
46
47
|
*/
|
|
47
48
|
installPluginDependencies(pluginName: string): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* 监听插件目录,实现热重载
|
|
50
|
-
* @param core Core实例
|
|
51
|
-
* @param config Config实例
|
|
52
|
-
* @param pluginsDir 插件目录
|
|
53
|
-
*/
|
|
54
|
-
watchPlugins(core: Core, config: Config, pluginsDir?: string): void;
|
|
55
49
|
}
|
|
56
50
|
export default PluginLoader;
|
package/dist/index.js
CHANGED
|
@@ -32,16 +32,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
const path = __importStar(require("path"));
|
|
37
|
+
const core_1 = require("@yumerijs/core");
|
|
40
38
|
const fs = __importStar(require("fs"));
|
|
41
39
|
const util_1 = require("util");
|
|
42
40
|
const child_process_1 = require("child_process");
|
|
43
41
|
const tsNode = __importStar(require("ts-node"));
|
|
44
|
-
const chokidar_1 = __importDefault(require("chokidar"));
|
|
45
42
|
const url_1 = require("url");
|
|
46
43
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
47
44
|
class PluginLoader {
|
|
@@ -51,6 +48,7 @@ class PluginLoader {
|
|
|
51
48
|
this.config = null;
|
|
52
49
|
this.isDev = false;
|
|
53
50
|
this.pluginsDir = 'plugins'; // Default plugins directory
|
|
51
|
+
this.logger = new core_1.Logger('loader');
|
|
54
52
|
this.pluginCache = {};
|
|
55
53
|
this.core = core || null;
|
|
56
54
|
this.config = config || null;
|
|
@@ -75,7 +73,7 @@ class PluginLoader {
|
|
|
75
73
|
*/
|
|
76
74
|
async load(pluginName) {
|
|
77
75
|
if (this.pluginCache[pluginName]) {
|
|
78
|
-
|
|
76
|
+
this.logger.info(`Returning cached plugin: ${pluginName}`);
|
|
79
77
|
return this.pluginCache[pluginName];
|
|
80
78
|
}
|
|
81
79
|
let pluginPath;
|
|
@@ -112,7 +110,7 @@ class PluginLoader {
|
|
|
112
110
|
return plugin;
|
|
113
111
|
}
|
|
114
112
|
catch (e) {
|
|
115
|
-
|
|
113
|
+
this.logger.error(`Failed to load plugin from ${pluginPath}:`, e);
|
|
116
114
|
throw e;
|
|
117
115
|
}
|
|
118
116
|
}
|
|
@@ -152,7 +150,7 @@ class PluginLoader {
|
|
|
152
150
|
return pluginModule;
|
|
153
151
|
}
|
|
154
152
|
catch (e) {
|
|
155
|
-
|
|
153
|
+
this.logger.error(`Error loading plugin from path ${pluginPath}:`, e);
|
|
156
154
|
throw e;
|
|
157
155
|
}
|
|
158
156
|
}
|
|
@@ -175,7 +173,7 @@ class PluginLoader {
|
|
|
175
173
|
if (require.cache[resolvedPath]) {
|
|
176
174
|
delete require.cache[resolvedPath];
|
|
177
175
|
}
|
|
178
|
-
|
|
176
|
+
this.logger.info(`Plugin unloaded: ${pluginName}`);
|
|
179
177
|
}
|
|
180
178
|
/**
|
|
181
179
|
* 检查插件的依赖是否满足.
|
|
@@ -192,83 +190,19 @@ class PluginLoader {
|
|
|
192
190
|
*/
|
|
193
191
|
async installPluginDependencies(pluginName) {
|
|
194
192
|
try {
|
|
195
|
-
|
|
193
|
+
this.logger.info(`Installing dependencies for plugin: ${pluginName}`);
|
|
196
194
|
const { stdout, stderr } = await execAsync(`npm install ${pluginName} --save`);
|
|
197
|
-
|
|
195
|
+
this.logger.info(`stdout: ${stdout}`);
|
|
198
196
|
if (stderr) {
|
|
199
|
-
|
|
197
|
+
this.logger.error(`stderr: ${stderr}`);
|
|
200
198
|
}
|
|
201
|
-
|
|
199
|
+
this.logger.info(`Dependencies installed for plugin: ${pluginName}`);
|
|
202
200
|
}
|
|
203
201
|
catch (error) {
|
|
204
|
-
|
|
202
|
+
this.logger.error(`Error installing dependencies for plugin ${pluginName}:`, error);
|
|
205
203
|
throw error;
|
|
206
204
|
}
|
|
207
205
|
}
|
|
208
|
-
/**
|
|
209
|
-
* 监听插件目录,实现热重载
|
|
210
|
-
* @param core Core实例
|
|
211
|
-
* @param config Config实例
|
|
212
|
-
* @param pluginsDir 插件目录
|
|
213
|
-
*/
|
|
214
|
-
watchPlugins(core, config, pluginsDir = 'plugins') {
|
|
215
|
-
const watcher = chokidar_1.default.watch(pluginsDir, {
|
|
216
|
-
ignored: /(^|[/\\])\../, // 忽略点文件
|
|
217
|
-
persistent: true,
|
|
218
|
-
ignoreInitial: true,
|
|
219
|
-
awaitWriteFinish: {
|
|
220
|
-
stabilityThreshold: 200,
|
|
221
|
-
pollInterval: 100
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
watcher.on('add', async (pluginName) => {
|
|
225
|
-
if (pluginName.endsWith('.ts') || pluginName.endsWith('.js'))
|
|
226
|
-
return;
|
|
227
|
-
console.log(`New plugin detected: ${pluginName}`);
|
|
228
|
-
try {
|
|
229
|
-
// 仅加载目录名作为插件名
|
|
230
|
-
const pluginDirName = path.basename(pluginName);
|
|
231
|
-
await this.load(pluginDirName);
|
|
232
|
-
if (this.core && this.config)
|
|
233
|
-
this.core.emit('plugin-loaded', pluginName);
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
console.error(`Failed to load new plugin ${pluginName}:`, error);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
watcher.on('change', async (pluginName) => {
|
|
240
|
-
if (!pluginName.endsWith('.ts'))
|
|
241
|
-
return;
|
|
242
|
-
console.log(`Plugin changed: ${pluginName}`);
|
|
243
|
-
try {
|
|
244
|
-
const pluginDirName = path.dirname(pluginName);
|
|
245
|
-
//const pluginDirName = path.basename(pluginName);
|
|
246
|
-
await this.unloadPlugin(pluginDirName);
|
|
247
|
-
await this.load(pluginDirName);
|
|
248
|
-
if (this.core && this.config)
|
|
249
|
-
this.core.emit('plugin-reloaded', pluginName);
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
console.error(`Failed to reload plugin ${pluginName}:`, error);
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
watcher.on('unlink', async (pluginName) => {
|
|
256
|
-
if (!pluginName.endsWith('.ts'))
|
|
257
|
-
return;
|
|
258
|
-
console.log(`Plugin removed: ${pluginName}`);
|
|
259
|
-
try {
|
|
260
|
-
const pluginDirName = path.dirname(pluginName);
|
|
261
|
-
//const pluginDirName = path.basename(pluginName);
|
|
262
|
-
await this.unloadPlugin(pluginDirName);
|
|
263
|
-
if (this.core && this.config)
|
|
264
|
-
this.core.emit('plugin-unloaded', pluginName);
|
|
265
|
-
}
|
|
266
|
-
catch (error) {
|
|
267
|
-
console.error(`Failed to unload plugin ${pluginName}:`, error);
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
console.log(`Watching for plugin changes in ${pluginsDir}`);
|
|
271
|
-
}
|
|
272
206
|
}
|
|
273
207
|
exports.default = PluginLoader;
|
|
274
208
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|