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', ], }
|
完整的使用实例可以看另一篇文章