mirror of
https://github.com/certd/certd.git
synced 2026-04-14 20:40:53 +08:00
54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
|
|
// 扫描目录,列出文件,然后加载为模块
|
|||
|
|
|
|||
|
|
import { join } from 'path';
|
|||
|
|
import fs from 'fs'
|
|||
|
|
import { pathToFileURL } from "node:url";
|
|||
|
|
import path from 'path'
|
|||
|
|
function scanDir(dir) {
|
|||
|
|
const files = fs.readdirSync(dir);
|
|||
|
|
const result = [];
|
|||
|
|
// 扫描目录及子目录
|
|||
|
|
for (const file of files) {
|
|||
|
|
if (file.includes("index.js")) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const filePath = join(dir, file);
|
|||
|
|
const stat = fs.statSync(filePath);
|
|||
|
|
if (stat.isDirectory()) {
|
|||
|
|
result.push(...scanDir(filePath));
|
|||
|
|
} else {
|
|||
|
|
if (!file.endsWith(".js")) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
result.push(filePath);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return result
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default async function loadModules(dir) {
|
|||
|
|
const files = scanDir(dir);
|
|||
|
|
const modules = {}
|
|||
|
|
for (const file of files) {
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// 转换为 file:// URL(Windows 必需)
|
|||
|
|
const moduleUrl = pathToFileURL(file).href
|
|||
|
|
const module = await import(moduleUrl)
|
|||
|
|
|
|||
|
|
// 如果模块有默认导出,优先使用
|
|||
|
|
modules[file] = module.default || module
|
|||
|
|
} catch (err) {
|
|||
|
|
console.error(`加载模块 ${file} 失败:`, err)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return modules;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const modules = await loadModules('./dist/plugins');
|
|||
|
|
|
|||
|
|
for (const key in modules) {
|
|||
|
|
console.log(key)
|
|||
|
|
}
|