
* 媒体库增加批量导入URL * fix 描述错误 * feature: 自动化代码方法支持增加方法描述 * update: 更新依赖,升级为最新版本 * feature: 自动化代码预览部分支持黑夜模式 * fixed: 修复keepalive上线后失效的bug * feature: 增加自动化基础模板功能 * feature: 增加自动化基础模板功能 * 将用户配置保存到数据库,刷新或者异地登录配置不丢失 * update: 清除无用的userinfo配置信息 * fixed: 清理开发阶段页面无端进入404的bug * feature: 前端主题配置跟随用户,不再单独设置json编译生效。 * feature: 增加个人中心配置兼容性 * fix(package): 包名设置为中文会导致无法自动生成代码,禁止包名设置为中文 * feature: 格式化代码 * feature: 对严格模式新建根角色进行调整。 * feature: 版本变更为2.7.4 --------- Co-authored-by: sliboy <34034053+sliboy@users.noreply.github.com> Co-authored-by: ba0ch3ng <ba0ch3ng@foxmail.com> Co-authored-by: task <121913992@qq.com> Co-authored-by: task <ms.yangdan@gmail.com> Co-authored-by: 爱丽-黑子 <62006632+ailiheizi@users.noreply.github.com> Co-authored-by: sliboy <sliboy@hotmail.com>
75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
// 递归获取目录下所有的 .vue 文件
|
|
const getAllVueFiles = (dir, fileList = []) => {
|
|
const files = fs.readdirSync(dir);
|
|
files.forEach(file => {
|
|
const filePath = path.join(dir, file);
|
|
if (fs.statSync(filePath).isDirectory()) {
|
|
getAllVueFiles(filePath, fileList);
|
|
} else if (filePath.endsWith('.vue')) {
|
|
fileList.push(filePath);
|
|
}
|
|
});
|
|
return fileList;
|
|
}
|
|
|
|
// 从 .vue 文件内容中提取组件名称
|
|
const extractComponentName = (fileContent) => {
|
|
const regex = /defineOptions\(\s*{\s*name:\s*["']([^"']+)["']/;
|
|
const match = fileContent.match(regex);
|
|
return match ? match[1] : null;
|
|
}
|
|
|
|
// Vite 插件定义
|
|
const vueFilePathPlugin = (outputFilePath) => {
|
|
let root;
|
|
|
|
const generatePathNameMap = () => {
|
|
const vueFiles = [
|
|
...getAllVueFiles(path.join(root, 'src/view')),
|
|
...getAllVueFiles(path.join(root, 'src/plugin'))
|
|
];
|
|
const pathNameMap = vueFiles.reduce((acc, filePath) => {
|
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
const componentName = extractComponentName(content);
|
|
if (componentName) {
|
|
let relativePath ="/" + path.relative(root, filePath).replace(/\\/g, '/');
|
|
acc[relativePath] = componentName;
|
|
}
|
|
return acc;
|
|
}, {});
|
|
const outputContent = JSON.stringify(pathNameMap, null, 2);
|
|
fs.writeFileSync(outputFilePath, outputContent);
|
|
};
|
|
|
|
const watchDirectoryChanges = () => {
|
|
const watchDirectories = [path.join(root, 'src/view'), path.join(root, 'src/plugin')];
|
|
watchDirectories.forEach(dir => {
|
|
fs.watch(dir, { recursive: true }, (eventType, filename) => {
|
|
if (filename) {
|
|
generatePathNameMap();
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
|
|
|
|
return {
|
|
name: 'vue-file-path-plugin',
|
|
configResolved(resolvedConfig) {
|
|
root = resolvedConfig.root;
|
|
},
|
|
buildEnd() {
|
|
generatePathNameMap();
|
|
if (process.env.NODE_ENV === 'development') {
|
|
watchDirectoryChanges();
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
export default vueFilePathPlugin
|