You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.8 KiB
179 lines
5.8 KiB
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 |
|
} |
|
} |
|
})
|
|
|