vite2 实战配置

简介:新项目,新气象,选择了激进的技术栈,vite2 常用配置。

项目目录

1
.
2
├── README.md
3
├── build.sh #打包脚本
4
├── commitlint.config.js
5
├── index.html
6
├── mock #mock
7
│   ├── index.ts
8
│   └── list.ts
9
├── package.json
10
├── postcss.config.js
11
├── public #静态文件
12
│   ├── data.json
13
│   ├── favicon.ico
14
│   └── tinymce
15
├── src
16
│   ├── App.vue #根组件
17
│   ├── api  #接口
18
│   ├── assets #资源
19
│   ├── components #组件
20
│   ├── hooks #hooks
21
│   ├── icons #svg图标
22
│   ├── layout #页面布局
23
│   ├── locales #国际化配置
24
│   ├── main.ts #项目入口
25
│   ├── permission.ts #权限处理,导航守卫
26
│   ├── plugins #插件,包含指令,UI库等
27
│   ├── router #路由
28
│   ├── store #数据仓库
29
│   ├── styles #全局样式和样式变量
30
│   ├── types #ts类型
31
│   ├── utils #工具函数
32
│   └── views #页面
33
├── tsconfig.json #ts项目配置
34
├── update.sh #提交代码脚本
35
├── vite.config.ts #vite项目配置
36
└── yarn.lock

vite.config.ts

1
import { resolve } from 'path'
2
import { defineConfig, loadEnv, UserConfigExport, ConfigEnv } from 'vite'
3
import vue from '@vitejs/plugin-vue'
4
import legacy from '@vitejs/plugin-legacy'
5
import html from 'vite-plugin-html'
6
import viteSvgIcons from 'vite-plugin-svg-icons'
7
import viteCompression from 'vite-plugin-compression'
8
import { viteMockServe } from 'vite-plugin-mock'
9
10
const pathResolve = (dir: string): string => resolve(__dirname, '.', dir)
11
12
// https://vitejs.dev/config/
13
const config = ({ command, mode }: ConfigEnv): UserConfigExport => {
14
  // 环境变量
15
  const env = loadEnv(mode, process.cwd())
16
  // 生产环境判断
17
  const isEnvProduction = mode === 'production'
18
  // vite插件
19
  const plugins = [
20
    vue(),
21
22
    /**
23
     *  注入环境变量到html模板中
24
     *  如在  .env文件中有环境变量  VITE_APP_TITLE=admin
25
     *  则在 html模板中  可以这样获取  <%- VITE_APP_TITLE %>
26
     *  文档:  https://github.com/anncwb/vite-plugin-html
27
     */
28
    html({
29
      inject: {
30
        injectData: { ...env }
31
      },
32
      minify: true
33
    }),
34
35
    /**
36
     *  把src/icons 下的所有svg 自动加载到body下,供组件使用
37
     *  类似于webpack中的svg-sprite-loader
38
     *  文档:https://github.com/anncwb/vite-plugin-svg-icons
39
     */
40
    viteSvgIcons({
41
      // 指定需要缓存的图标文件夹
42
      iconDirs: [resolve(process.cwd(), 'src/icons')],
43
      // 指定symbolId格式
44
      symbolId: 'icon-[name]'
45
    })
46
  ]
47
48
  if (isEnvProduction) {
49
    plugins.push(
50
      // 兼容插件
51
      legacy({
52
        targets: ['defaults', 'not IE 11']
53
      }),
54
55
      // gzip插件,打包压缩代码成gzip  文档: https://github.com/anncwb/vite-plugin-compression
56
      viteCompression()
57
    )
58
  } else {
59
    plugins.push(
60
      // mock  文档:https://github.com/anncwb/vite-plugin-mock
61
      viteMockServe({
62
        mockPath: 'mock',
63
        localEnabled: command === 'serve',
64
        logger: true
65
      })
66
    )
67
  }
68
  
69
  return defineConfig({
70
    // 基础路径,配合vue-router的createWebHashHistory使用
71
    base: './',
72
    plugins,
73
    define: {
74
      // setting vue-i18-next
75
      // Suppress warning
76
      __VUE_I18N_LEGACY_API__: false,
77
      __VUE_I18N_FULL_INSTALL__: false,
78
      __INTLIFY_PROD_DEVTOOLS__: false
79
    },
80
    server: {
81
      port: 8888,
82
      open: true
83
    },
84
    // alias 现在会被传递给 @rollup/plugin-alias 并不再需要开始/结尾处的斜线了。
85
    // 此行为目前是一个直接替换,所以 1.0 风格的目录别名需要删除其结尾处的斜线:
86
    resolve: {
87
      alias: [
88
        { find: '@', replacement: pathResolve('src') },
89
        // 解决警告You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.
90
        {
91
          find: 'vue-i18n',
92
          replacement: 'vue-i18n/dist/vue-i18n.cjs.js'
93
        }
94
      ]
95
    },
96
    build: {
97
      target: 'es2015',
98
      outDir: 'dist',
99
      assetsDir: 'assets',
100
      assetsInlineLimit: 2048,
101
      cssCodeSplit: true,
102
      // Terser 相对较慢,但大多数情况下构建后的文件体积更小。ESbuild 最小化混淆更快但构建后的文件相对更大。
103
      minify: !isEnvProduction ? 'esbuild' : 'terser',
104
      terserOptions: {
105
        compress: {
106
          // 生产环境去除console
107
          drop_console: isEnvProduction
108
        }
109
      }
110
    }
111
  })
112
}
113
114
export default config

参考链接

1.https://cn.vitejs.dev/