vite按需导入element-plus组件 css

1,052 阅读1分钟
import vue from '@vitejs/plugin-vue';
import styleImport from 'vite-plugin-style-import';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import viteCompression from 'vite-plugin-compression';
import { resolve } from 'path';
export default defineConfig({
    base: './',
    plugins: [
        vue(),
        // 生产环境生成 .gz 文件
        viteCompression({
            verbose: true, // 是否在控制台输出压缩结果
            deleteOriginFile: false, // 	压缩后是否删除源文件
            threshold: 10240, // 如果体积大于阈值,它将被压缩,单位为b
            algorithm: 'gzip', //压缩算法
            ext: '.gz', // 生成的压缩包后缀
        }),
        //按需导入element-plus组件
        Components({
            resolvers: [ElementPlusResolver()],
        }),
        //按需导入element-plus的css样式
        styleImport({
            libs: [
                {
                    libraryName: 'element-plus',
                    esModule: true,
                    resolveStyle: name => {
                        return `element-plus/lib/theme-chalk/${name}.css`;
                    },
                },
            ],
        }),
    ],
    resolve: {
        alias: {
            '@': resolve(__dirname, 'src'),
            comp: resolve(__dirname, 'src/components'),
            '#': resolve(__dirname, 'types'),
        },
        // 忽略拓展名
        extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss'],
    },
    build: {
        target: 'es2015',
        outDir: 'dist',
        sourcemap: process.env.NODE_ENV === 'development' ? true : false,
        terserOptions: {
            compress: {
                keep_infinity: true,
                // 打包自动删除console
                drop_console: true,
                drop_debugger: true,
                // 对代码压缩的次数,默认是1,压缩次数越多,时间越长
                passes: 100,
            },
        },
        // 启用/禁用 brotli 压缩大小报告。压缩大型输出文件可能会很慢,因此禁用它可能会提高大型项目的构建性能。
        brotliSize: false,
        // 块大小警告的限制(以 kbs 为单位),默认: 500
        chunkSizeWarningLimit: 1200,
        rollupOptions: {
            output: {
                manualChunks(id) {
                    // 分包
                    if (id.includes('node_modules')) {
                        return id.toString().split('node_modules/')[1].split('/')[0].toString();
                    }
                },
            },
        },
    },
    css: {
        preprocessorOptions: {
            scss: {
                additionalData: `@import "./src/assets/scss/public.scss";`,
            },
        },
    },
});