123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import { resolve } from 'path'
- import { loadEnv } from 'vite'
- import type { UserConfig, ConfigEnv } from 'vite'
- import Vue from '@vitejs/plugin-vue'
- import WindiCSS from 'vite-plugin-windicss'
- import VueJsx from '@vitejs/plugin-vue-jsx'
- import EslintPlugin from 'vite-plugin-eslint'
- import VueI18n from '@intlify/vite-plugin-vue-i18n'
- import { createStyleImportPlugin, ElementPlusResolve } from 'vite-plugin-style-import'
- import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
- import PurgeIcons from 'vite-plugin-purge-icons'
- import DefineOptions from 'unplugin-vue-define-options/vite'
- import { createHtmlPlugin } from 'vite-plugin-html'
- import viteCompression from 'vite-plugin-compression'
- // 当前执行node命令时文件夹的地址(工作目录)
- const root = process.cwd()
- // 路径查找
- function pathResolve(dir: string) {
- return resolve(root, '.', dir)
- }
- // https://vitejs.dev/config/
- export default ({ command, mode }: ConfigEnv): UserConfig => {
- let env = {} as any
- const isBuild = command === 'build'
- if (!isBuild) {
- env = loadEnv((process.argv[3] === '--mode' ? process.argv[4] : process.argv[3]), root)
- } else {
- env = loadEnv(mode, root)
- }
- return {
- base: env.VITE_BASE_PATH,
- root: root,
- // 服务端渲染
- server: {
- // 是否开启 https
- https: false,
- // 端口号
- port: env.VITE_PORT,
- host: "0.0.0.0",
- open: env.VITE_OPEN,
- // 本地跨域代理
- proxy: {
- ['/dev-api']: {
- target: env.VITE_BASE_URL,
- ws: false,
- changeOrigin: true,
- rewrite: (path) => path.replace(new RegExp(`^/dev-api`), ''),
- },
- },
- },
- plugins: [
- Vue(),
- VueJsx(),
- WindiCSS(),
- createStyleImportPlugin({
- resolves: [ElementPlusResolve()],
- libs: [{
- libraryName: 'element-plus',
- esModule: true,
- resolveStyle: (name) => {
- return `element-plus/es/components/${name.substring(3)}/style/css`
- }
- }]
- }),
- EslintPlugin({
- cache: false,
- include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
- }),
- VueI18n({
- runtimeOnly: true,
- compositionOnly: true,
- include: [resolve(__dirname, 'src/locales/**')]
- }),
- createSvgIconsPlugin({
- iconDirs: [pathResolve('src/assets/svgs')],
- symbolId: 'icon-[dir]-[name]',
- svgoOptions: true
- }),
- PurgeIcons(),
- DefineOptions(),
- viteCompression({
- verbose: true, // 是否在控制台输出压缩结果
- disable: true, // 是否禁用
- threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
- algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
- ext: '.gz', // 生成的压缩包后缀
- deleteOriginFile: false //压缩后是否删除源文件
- }),
- createHtmlPlugin({
- inject: {
- data: {
- title: env.VITE_APP_TITLE,
- injectScript: `<script src="./inject.js"></script>`
- }
- }
- })
- ],
- css: {
- preprocessorOptions: {
- less: {
- additionalData: '@import "./src/styles/variables.module.less";',
- javascriptEnabled: true
- }
- }
- },
- resolve: {
- extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.less', '.css'],
- alias: [
- {
- find: 'vue-i18n',
- replacement: 'vue-i18n/dist/vue-i18n.cjs.js'
- },
- {
- find: /\@\//,
- replacement: `${pathResolve('src')}/`
- }
- ]
- },
- build: {
- minify: 'terser',
- outDir: env.VITE_OUT_DIR || 'dist',
- sourcemap: env.VITE_SOURCEMAP === 'true' ? 'inline' : false,
- // brotliSize: false,
- terserOptions: {
- compress: {
- drop_debugger: env.VITE_DROP_DEBUGGER === 'true',
- drop_console: env.VITE_DROP_CONSOLE === 'true'
- }
- }
- },
- optimizeDeps: {
- include: [
- 'vue',
- 'vue-router',
- 'vue-types',
- 'vue-i18n',
- 'element-plus/es',
- 'element-plus/es/locale/lang/zh-cn',
- 'element-plus/es/locale/lang/en',
- '@iconify/iconify',
- '@vueuse/core',
- 'axios',
- 'qs',
- 'dayjs',
- 'echarts',
- 'echarts-wordcloud',
- 'intro.js',
- 'qrcode',
- 'pinia',
- '@wangeditor/editor',
- '@wangeditor/editor-for-vue'
- ]
- }
- }
- }
|