import { defineConfig, PluginOption } from 'vite' import Vue from '@vitejs/plugin-vue' import VueJsx from '@vitejs/plugin-vue-jsx' import { resolve } from 'path' import { visualizer } from 'rollup-plugin-visualizer' import DefineOptions from 'unplugin-vue-define-options/vite' // 引入插件 import { Plugin as importToCDN } from 'vite-plugin-cdn-import' import commonjs from 'vite-plugin-commonjs' import { fileURLToPath, URL } from 'node:url' // import viteImagemin from 'vite-plugin-imagemin' // import viteCompression from 'vite-plugin-compression' const lifecycle = process.env.npm_lifecycle_event // { // name: 'axios', // var: 'axios', // path: 'https://lib.baomitu.com/axios/1.6.8/axios.min.js' // }, export default defineConfig({ base: './', envDir: 'env', plugins: [ // VueMacros({ // plugins: { // vue: Vue(), // vueJsx: VueJsx(), // if needed // }, // betterDefine: true, // // reactivityTransform: { // // exclude: [/node_modules/, /jQuery\.js/] // // } // }), lifecycle === 'report' ? (visualizer({ open: false }) as any as PluginOption) : null, DefineOptions(), Vue(), VueJsx(), importToCDN({ modules: [ { name: 'vue', var: 'Vue', path: `https://lib.baomitu.com/vue/3.4.21/vue.runtime.global.prod.min.js` }, { name: 'vue-router', var: 'VueRouter', path: 'https://lib.baomitu.com/vue-router/4.3.0/vue-router.global.prod.min.js' }, { name: 'vue-demi', var: 'VueDemi', path: 'https://lib.baomitu.com/vue-demi/0.14.7/index.iife.min.js' }, { name: 'mockjs', var: 'Mock', path: 'https://lib.baomitu.com/Mock.js/1.0.1-beta3/mock-min.js' }, { name: 'jquery', var: '$', path: 'https://lib.baomitu.com/jquery/3.6.0/jquery.min.js' } ] }) // viteCompression({ // verbose: false, // disable: false, // threshold: 10240, // algorithm: 'brotliCompress', // }), // viteCompression({ // verbose: false, // disable: false, // algorithm: 'gzip', // threshold: 10240, // }), // viteImagemin({ // gifsicle: { // optimizationLevel: 7, // interlaced: false, // }, // optipng: { // optimizationLevel: 7, // }, // mozjpeg: { // quality: 20, // }, // pngquant: { // quality: [0.8, 0.9], // speed: 4, // }, // svgo: { // plugins: [ // { // name: 'removeViewBox', // }, // { // name: 'removeEmptyAttrs', // active: false, // }, // ], // }, // }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] }, build: { sourcemap: false, rollupOptions: { // https://rollupjs.org/guide/en/#outputmanualchunks output: { manualChunks(id, { getModuleInfo }) { const reg = /(.*)\/src\/components\/(.*)/ if (reg.test(id)) { const importersLen = getModuleInfo(id)?.importers.length ?? 0 // 被多处引用 if (importersLen > 1) return 'common' } if (id.includes('node_modules')) return 'vendor' if (id.includes('/src/pages/home/Publish.vue')) return 'other' if (id.includes('/src/pages/home/Music.vue')) return 'other' if (id.includes('/src/pages/home/MusicRankList.vue')) return 'other' if (id.includes('/src/pages/home/LivePage.vue')) return 'other' if (id.includes('/src/pages/home/SearchPage.vue')) return 'other' if (id.includes('/src/pages/shop/Shop.vue')) return 'other' if (id.includes('/src/pages/shop/GoodsDetail.vue')) return 'other' if (id.includes('/src/pages/message/Message.vue')) return 'other' if (id.includes('/src/pages/message/Fans.vue')) return 'other' if (id.includes('/src/pages/message/AllMessage.vue')) return 'other' if (id.includes('/src/pages/message/notice/DouyinHelper.vue')) return 'other' if (id.includes('/src/pages/message/notice/SystemNotice.vue')) return 'other' if (id.includes('/src/pages/message/notice/TaskNotice.vue')) return 'other' if (id.includes('/src/pages/message/notice/LiveNotice.vue')) return 'other' if (id.includes('/src/pages/message/notice/MoneyNotice.vue')) return 'other' if (id.includes('/src/pages/me/Me.vue')) return 'other' if (id.includes('/src/pages/me/Visitors.vue')) return 'other' if (id.includes('/src/pages/me/RequestUpdate.vue')) return 'other' if (id.includes('/src/pages/me/userinfo/EditUserInfo.vue')) return 'other' if (id.includes('/src/pages/me/userinfo/EditUserInfoItem.vue')) return 'other' if (id.includes('/src/pages/me/MyMusic.vue')) return 'other' if (id.includes('/src/pages/other/VideoDetail.vue')) return 'other' if (id.includes('/src/pages/other/AlbumDetail.vue')) return 'other' if (id.includes('/src/pages/people/FindAcquaintance.vue')) return 'other' if (id.includes('/src/pages/people/FollowAndFans.vue')) return 'other' }, chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称 entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称 assetFileNames: 'assets/[name]-[hash].[ext]' // 资源文件像 字体,图片等 } }, assetsInlineLimit: 2048 }, esbuild: { drop: ['console', 'debugger'] }, server: { port: 3000, open: true, host: '0.0.0.0', fs: { strict: false } } })