vue2
vue3
Vue3内置的构建工具是Vite,
vite的优势:
冷服务   默认的构建目标浏览器是能 在 script 标签上支持原生 ESM 和 原生 ESM 动态导入 
HMR  速度快到惊人的 模块热更新(HMR) 
Rollup打包  它使用 Rollup 打包你的代码,并且它是预配置的 并且支持大部分rollup插件 
vite构建
1 2 3 4
   |  npm init vite@latest
  yarn create vite
 
  | 
 
vue直接构建
这个配置比yarn配置会更详细一点
vite.config.js基本配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
   | import { defineConfig } from "vite"; import { resolve } from "path"; import vue from '@vitejs/plugin-vue'; 
 
  function pathResolve(dir) {   return resolve(__dirname, ".", dir); }
  export default defineConfig({     base: "",          plugins:[vue()],     publicDir: 'public',       resolve: {         alias: {           "/@": pathResolve("src"),         }     },          optimizeDeps: {         include: ['axios'],     },      css: {         preprocessorOptions: {         scss: {             charset: false,              javascriptEnabled: true,             additionalData: `@import "${resolve(             __dirname,             "src/assets/css/var.scss"             )}";`,         },         },     },     json: {                   namedExports: true,                  stringify:false,      },     build: {       target: 'modules',       outDir: 'dist',       assetsDir: 'assets',       assetsInlineLimit: '4096',        cssCodeSplit: true,        sourcemap: false,        minify: 'terser'        write: true,          emptyOutDir: true,         brotliSize: true,         chunkSizeWarningLimit: 500,                terserOptions: {                compress: {                  drop_console: true,                 drop_debugger: true,              },         }     },          server: {         host: 'localhost',          port: 3000,          cors: true,         open: true,         strictPort: false,          https: false,                   proxy: {                      '/foo': 'http://192.168.xxx.xxx:xxxx',                       '/api': {               target: 'http://192.168.99.223:3000',                  changeOrigin: true,               rewrite: (path) => path.replace(/^\/api/, '')           }         }     } });
 
 
  | 
 
忽略.vue后缀
在开发vue2的时候导入文件习惯性忽略.vue后缀的。但在Vite里会引起报错。
1 2
   | import Home from '@/views/home'  import Home from '@/views/home.vue' 
   | 
 
1 2 3 4 5 6 7
   |  import { defineConfig } from 'vite' export default defineConfig({   resolve: {     extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue']   } })
 
  | 
 
这里要注意,手动配置extensions要记得把其他类型的文件后缀也加上,因为其他类型如js等文件默认是可以忽略后缀导入的,不写上的话其他类型文件的导入就变成需要加后缀了。虽然可以这么做,不过毕竟官方文档说了不建议忽略.vue后缀,所以建议大家在实际开发中还是老老实实写上.vue。
按需导入element-plus
1 2 3 4
   |  npm install -D unplugin-vue-components unplugin-auto-import npm install -D vite-plugin-style-import npm i -D unplugin-icons @iconify/json
 
  | 
 
依赖简介
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
   |  import AutoImport from 'unplugin-auto-import/vite'
  import Components from 'unplugin-vue-components/vite'
  import styleImport from 'vite-plugin-style-import';
  import Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  export default defineConfig({   plugins: [     vue(),          AutoImport({       resolvers: [ElementPlusResolver()],     }),     Components({       resolvers: [ElementPlusResolver(),IconsResolver()],     }),      Icons({       compiler: 'vue3',       autoInstall: true,     }),          styleImport({       libs: [{         libraryName: 'element-plus',         esModule: true,         resolveStyle: (name) => {           return `element-plus/theme-chalk/${name}.css`;         },       }]     })   ], })
 
  | 
 
启动优化
值得一提的是:如果你的 vite版本 > 2.9.0,那么就不需要安装启动优化插件
在使用这几个按需引入插件后,我们使用 Vite 开发项目时,第一次经常会看到以下的场景:

这个耗时很久所以我们需要vite-plugin-optimize-persist插件来解决这个问题
1
   | npm i -D vite-plugin-optimize-persist vite-plugin-package-config
   | 
 
1 2 3 4 5 6 7 8 9 10
   |  import OptimizationPersist from 'vite-plugin-optimize-persist' import PkgConfig from 'vite-plugin-package-config'
  export default {   plugins: [     PkgConfig(),     OptimizationPersist()   ] }
 
  | 
 
这样配置完成后,我们第一次使用按需引入后,它就会在 package.json 中生成内容(生成的内容根据你项目所使用的组件而定),下次进来就可以快速的跑起项目啦
TypeScript 报红
很多人第一次配置完之后,会发现 编辑器 给我们在按需引入的组件上报了红:

这是因为我们生成的 auto-imports.d.ts 和 components.d.ts两个文件,默认是生成在项目根目录,正常我们配置的 TypeScript 解析的文件都放在 src 文件夹下,自然 TS 会报这个错啦;
解决办法很简单:
- 在 
tsconfig.json 中 include 这两个文件 
- 像下面这样配置,把两个 .d.ts 的生成目录放到 src 文件夹
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   |  import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite'
  export default {   plugins: [          AutoImport({       dts: './src/auto-imports.d.ts',     }),     Components({       dts: './src/components.d.ts'     }),   ], }
 
 
  | 
 
Eslint 报红
如果我们的项目中使用了Eslint,且使用了 unplugin-auto-import,那么你就会发现下面这一幕

这是因为 Eslint 找不到我们按需引入的这些 api,我们不需要import是爽了,人家Eslint不知道呀,就咯的一下给我们报红,那怎么办呢?好办,既然 Eslint 不知道我们按需引入了 api,那我们让它知道不就好了?看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   |  import AutoImport from 'unplugin-auto-import/vite'
  export default {   plugins: [          AutoImport({                     eslintrc: {         enabled: true,          filepath: './.eslintrc-auto-import.json',          globalsPropValue: true,        },     }),   ], }
 
 
  | 
 
这段代码,会让我们在根目录下生成一个 .eslintrc-auto-import.json文件,里面都是我们所引入的所有 API 名称,接下来我们只需要在 .eslintrc.js中加载这个文件即可
1 2 3 4 5 6 7 8 9 10
   | 
  module.exports = {       extends: [          './.eslintrc-auto-import.json',   ], }
 
 
  | 
 
完整的使用实例可以看另一篇文章