网站首页 > 基础教程 正文
最近在维护一个项目,发现公共组件都是一个个导出引入的,因此写了一个脚本文件将组件自动写入index.ts文件内,之后统一引用即可
使用前
import OACard from '@/components/common/OACard';
import OAInput from '@/components/common/OAInput';
import OASwitch from '@/components/common/OASwitch';
import OASelect from '@/components/common/OASelect';
import OATextarea from '@/components/common/OATextarea';
使用后
import { OAInput, OASwitch, OACard, OASelect, OATextarea } from '@/components/common';
代码如下
const fs = require('fs');
const path = require('path');
// 定义组件目录和导出文件的路径
const componentsDir = path.join(__dirname, '../src/components/common');
const exportFile = path.join(componentsDir, 'index.ts');
// 检查文件是否存在
const export_exists = fs.existsSync(exportFile);
//获取导出文件内容
let exportFileContent = ''
if(export_exists){
exportFileContent = fs.readFileSync(exportFile, 'utf-8');
}
// 获取组件目录下的所有文件
const files = fs.readdirSync(componentsDir);
// 过滤出 .tsx 文件
const tsxFiles = files.filter(file => path.extname(file) === '.tsx');
// 生成导出语句
const newStatements = []
for(let i=0;i<tsxFiles.length;i++){
const componentName = path.basename(tsxFiles[i], '.tsx');
//有些文件是以'-'拼接,需要特殊处理
const name = componentName.replace('-', '')
const impPath = `'./${componentName}';`;
//已经导出的组件不再重复导出
if(export_exists && exportFileContent.includes(impPath)) {
console.log(`组件 ${componentName} 已存在于导出文件中,跳过导出。`);
continue
}
//约定OA开头才是公共组件
if(!name.startsWith('OA')){
continue
}
console.log('impPath',impPath)
newStatements.push(`export { default as ${name} } from ${impPath}`)
}
const exportStatements = exportFileContent + '\n' + newStatements.join('\n');
// 将导出语句写入导出文件
fs.writeFileSync(exportFile, exportStatements);
console.log(`Components exported successfully to: ${exportFile}`);
上述代码加了后续添加组件时,之前代码不变动的逻辑,方便执行脚本之后内容还可以自定义配置。
- 上一篇: ES6新特性-----变量和字符串
- 下一篇: 我不允许自己还不了解AI流式数据的传输原理
猜你喜欢
- 2025-01-10 SpringBoot教程Thymeleaf详解
- 2025-01-10 前端教程:JavaScript页面打印
- 2025-01-10 Flutter实战之一-面向java程序员的Dart语言入门
- 2025-01-10 开发自己的nodejs命令行工具并使用工具
- 2025-01-10 记一次 Vue2 迁移 Vue3 的实践总结
- 2025-01-10 想要字体图标设计师却给了SVG?没关系,自己转
- 2025-01-10 Flutter Isar 数据库使用快速入门
- 2025-01-10 SpringSecurity和JWT实现认证和授权
- 2025-01-10 ES6 的新增语法
- 2025-01-10 F5负载均衡器如何通过irules实现应用的灵活转发?
- 05-21HTML DOM Columngroup 对象
- 05-21零基础学习HTML图像热区特殊字符无序列表和有序定义列表表格
- 05-21让div填充屏幕剩余高度的方法
- 05-21高效设计表格 - 用我们的HTML表格生成器轻松搞定
- 05-21前端入门——html 表单
- 05-21我问AI——以前网页编程流行用table布局,为什么不用了
- 05-21平和!晨间攻克 HTML 表格属性题,面试难题轻松化解
- 05-21一键超4400MHz!豪华灯效+高频至尊享受
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)