当前位置: 首页 > java >正文

vite导入优化插件vite-plugin-importer

https://github.com/ajuner/vite-plugin-importer/blob/main/src/index.js

// 正则表达式
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'const transformImportsPlugin=() =>{return {name: 'transform-imports',transform(code, id) {const transformedCode = code.replace(/import\s+\{\s*(\w+)\s*\}\s+from\s+'aui-vue3';/g,(match, p1) => {return `import ${p1} from 'aui-vue3-button';`;});return {code: transformedCode,map: null,};}};
}
// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),transformImportsPlugin()],
})
// 基于AST
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { parse } from '@babel/parser';
import traverse from '@babel/traverse';
import * as t from '@babel/types';
import generate from '@babel/generator';const transformImportsPlugin=(options = {})=> {return {name: 'vite-plugin-transform-imports',transform(code, id) {let ast;try {ast = parse(code, {sourceType: 'module',plugins: ['jsx', 'typescript'],});} catch (error) {return { code, map: null };}let transformedCode = code;const dynamicMappings = {};traverse.default(ast, {ImportDeclaration(path) {const { node } = path;if (node.source.value === 'aui-vue3') {node.specifiers.forEach(specifier => {if (t.isImportSpecifier(specifier)) {const importedName = (specifier.imported as {name:string}).name;const localName = specifier.local.name;dynamicMappings[importedName] = `aui-vue3`;const newImport = t.importDeclaration([t.importDefaultSpecifier(t.identifier(localName))],t.stringLiteral(dynamicMappings[importedName]));path.replaceWith(newImport);}});}},});const result = generate.default(ast, {}, code);transformedCode = result.code;return { code: transformedCode, map: null };},};
}
// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),transformImportsPlugin()],
})
// 官方github
const babelImport = require('babel-plugin-import');
const babel = require('@babel/core');
const importMeta = require('@babel/plugin-syntax-import-meta');function usePluginImport(options) {return {name: 'vite-plugin-importer',transform(code, id) {if (/\.(?:[jt]sx?|vue)$/.test(id) && !/node_modules\/vite/.test(id)) {const plugins = [importMeta, [babelImport, options]]const result = babel.transformSync(code, {ast: true,plugins,sourceFileName: id})return {code: result.code,map: result.map}}},};
};module.exports = usePluginImport//
plugins.push(usePluginImport({libraryName:'aui-vue3',style:false,customName(name:string){return `aui-vue3-${name}`}
}))
http://www.xdnf.cn/news/9767.html

相关文章:

  • 华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【ConvLSTM第一期】ConvLSTM原理
  • 回文数-leetCode-009
  • [Java恶补day10] 560. 和为K的子数组
  • 每日Prompt:卵石拼画
  • 计算机图形学:(五)坐标系
  • 排序算法-归并排序与快速排序
  • 如何避免客户频繁更换对接人
  • vue3项目 前端文件下载的两种工具函数
  • spring的多语言怎么实现?
  • OSI 七大层详解
  • vue element日期范围选择器只能选择指定天数内的
  • shell脚本实现字符串子网掩码转为位数
  • mqtt协议连接阿里云平台
  • 基于多模态脑电、音频与视觉信号的情感识别算法【Nature核心期刊,EAV:EEG-音频-视频数据集】
  • Deepseek应用技巧-Dify本地化搭建合同审批助手
  • Delphi 导入excel
  • 【东枫科技】KrakenSDR 测向快速入门指南
  • Vision Transformer网络结构
  • 【穷举】数字方格
  • 文件系统与文件管理:从磁盘到内核的全链路解析
  • 高效工具-tldr
  • 网络安全的守护者:iVX 如何构建全方位防护体系
  • 镍钯金PCB有哪些工艺优势?
  • 五、web安全--XSS漏洞(2)--XSS相关payload
  • 《Discuz! X3.5开发从入门到生态共建》第3章 Discuz! X3.5 核心目录结构解析-优雅草卓伊凡
  • Parsel深度解析:从入门到高阶的网页数据抓取艺术
  • python同步mysql数据
  • WPS 免登录解锁编辑
  • 安全访问 std::tuple 的容错方法及气象领域应用