123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- import vue from "@vitejs/plugin-vue";
- import AutoImport from "unplugin-auto-import/vite";
- import Components from "unplugin-vue-components/vite";
- import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
- import tailwindcss from '@tailwindcss/vite'
- import { loadEnv } from 'vite'
- import { resolve } from 'path'
- import { createVitePlugins } from './build/vite/plugin'
- import { versionPlugin } from './build/vite/plugin/versionPlugin'
- import pkg from './package.json'
- import proxy from './build/proxy'
- function pathResolve(dir) {
- return resolve(process.cwd(), '.', dir)
- }
- export default({ command, mode }) =>{
- const root = process.cwd()
- const isBuild = command === 'build'
- const viteEnv = loadEnv(mode, root)
- const { VITE_BASE, VITE_OUT_DIR, VITE_DROP_DEBUGGER, VITE_DROP_CONSOLE, VITE_PORT } = viteEnv
- const now = new Date().getTime()
- const customArgs = process.argv.slice(3)
- const module = customArgs.find((m) => m.startsWith('module='))?.split('module=')[1]
- // const viteBase = module ? `/${VITE_BASE.replace(/\//g, '')}-${module}/` : VITE_BASE
- const viteBase = './'
- const viteOutDir = module ? `${VITE_OUT_DIR.split('-')[0]}-${module}` : VITE_OUT_DIR
- return {
- root,
- base: viteBase,
- define: {
- __APP_VERSION__: now,
- },
- plugins: [
- ...createVitePlugins(viteEnv, isBuild),
- versionPlugin({
- version: now,
- }),
- // vue(),
- tailwindcss(),
- AutoImport({
- resolvers: [ElementPlusResolver()],
- }),
- Components({
- resolvers: [ElementPlusResolver()],
- }),
- ],
- // resolve: {
- // alias: {
- // "@": path.resolve(__dirname, "./src"),
- // },
- // },
- css: {
- preprocessorOptions: {
- scss: {
- additionalData: `
- @use "@/styles/variables" as *;
- @use "@/styles/mixins" as *;
- `,
- }
- }
- },
- // 路径问题
- resolve: {
- extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.less', '.css'],
- alias: [
- // @/xxxx => src/xxxx
- {
- find: /\@\//,
- replacement: `${pathResolve('src')}/`,
- },
- ],
- },
- build: {
- target: 'es2015',
- cssTarget: 'chrome83',
- outDir: viteOutDir,
- sourcemap: false,
- brotliSize: false,
- // 关闭brotliSize显示可以稍微减少打包时间
- reportCompressedSize: false,
- // 超大静态资源警告大小
- chunkSizeWarningLimit: 1500,
- minify: 'terser',
- terserOptions: {
- compress: {
- // 删除所有 debugger
- drop_debugger: VITE_DROP_DEBUGGER === 'true',
- // 删除所有 console
- drop_console: VITE_DROP_CONSOLE === 'true',
- },
- },
- rollupOptions: {
- treeshake: true,
- output: {
- // 设置chunk的文件名格式
- chunkFileNames: 'assets/js/[name].[hash].js',
- // 设置入口文件的文件名格式
- entryFileNames: 'assets/js/[name].[hash].js',
- // 设置静态资源文件的文件名格式
- assetFileNames: 'assets/[ext]/[name].[hash].[ext]',
- // 最小化拆分包
- manualChunks(id) {
- if (id.includes('node_modules')) {
- // 指定需要拆分的第三方库或模块
- const dependenciesKeys = Object.keys(pkg.dependencies)
- const match = dependenciesKeys.find((item) => {
- return id.includes(item)
- })
- if (match) {
- // 合并打包
- if (['vue', 'vue-router'].includes(match)) {
- return 'vue'
- } else if (['element-plus', '@element-plus/icons-vue'].includes(match)) {
- return 'element-plus-vendor'
- } else {
- return match
- }
- }
- }
- },
- },
- },
- },
- server: {
- https: false,
- host: true,
- port: VITE_PORT,
- proxy,
- },
- test: {
- globals: true,
- environment: 'jsdom',
- },
- }
- }
|