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}`}
}))