当前位置:   article > 正文

Vite 打包优化_vite打包 组件 js名称

vite打包 组件 js名称

目录

优化前

优化后

1. 首先安装打包分析插件

1.1 安装

1.2 vite.config.js配置

1.3 打包

2. 按需引入

2.1 第三方组件按需引入

2.1.1 安装插件

2.1.2 vite.config.js配置

2.2 第三方组件样式按需引入

2.2.1 安装插件

2.2.2 vite.config.js配置

2.3 echarts 按需引入

2.3.1 创建配置文件 echarts.js(放哪都行)

2.3.2 在main.js中全局挂载

2.3.3 在页面中使用

3.vite插件-vite-plugin-html

3.1 安装

3.2 vite.config.js配置

3.3 在 index.html 中增加EJS标签

4. vite插件 vite-plugin-vue-images

4.1 安装

4.2 vite.config.js配置

4.3 使用方式

4.3.1 页面引入

4.3.2 图片所在位置

4.3.3 页面展示

5.vite插件 unplugin-imagemin/vite

5.1 安装

5.2 vite.config.js 配置 

6. vite插件 vite-plugin-compression

6.1 安装

 6.2 Vite.config.js配置

7. 配置打包文件分类输出

7.1 基础配置

7.2 模块拆分

最终成果(7.77MB-800KB)


优化前

优化之前,我们先看看dist文件大小。

如下图:

5f58de8a702248ea91066225fbe3e71d.png

优化后

7756dc1bcce744648b89b5dceda76521.png

1. 首先安装打包分析插件

1.1 安装

npm install rollup-plugin-visualizer -D

1.2 vite.config.js配置

  1. // vite.config.js
  2. import { defineConfig } from 'vite'
  3. import { visualizer } from 'rollup-plugin-visualizer'
  4. export default defineConfig({
  5. plugins: [visualizer()]
  6. })

1.3 打包

打包后,会在根目录下生成一个 stats.html文件,用浏览器打开后,如下图:

在图中,可以清晰的看到各个模块占用空间大小。

7fe99bb0491c44dd90d4b69d560cd309.png

2. 按需引入

 开始优化...

2.1 第三方组件按需引入

注:也可以将自定义组件自动引入,此后,main.js就不需要import 第三方组件。自定义组件不做配置,仅配置第三方组件自动按需引入。

举例:elementPlus

2.1.1 安装插件

npm i unplugin-vue-components -D

2.1.2 vite.config.js配置

  1. import Components from "unplugin-vue-components/vite"
  2. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  3. export default defineConfig({
  4. plugins: [
  5. // element plus组件按需自动引入
  6. Components({
  7. resolvers: [ElementPlusResolver()]
  8. }),
  9. ]
  10. })

2.2 第三方组件样式按需引入

2.2.1 安装插件

npm i vite-plugin-style-import -D

2.2.2 vite.config.js配置

  1. import {createStyleImportPlugin, ElementPlusResolve } from 'vite-plugin-style-import';
  2. export default defineConfig({
  3. plugins: [
  4. // element plus样式按需自动引入
  5. createStyleImportPlugin({
  6. resolves: [ElementPlusResolve()]
  7. })
  8. ]
  9. })

2.3 echarts 按需引入

2.3.1 创建配置文件 echarts.js(放哪都行)

  1. // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
  2. import * as echarts from "echarts/core";
  3. /** 引入折线图,如果还需要其他的,就添加 */
  4. import { LineChart } from "echarts/charts";
  5. // 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
  6. import {
  7. TitleComponent,
  8. TooltipComponent,
  9. GridComponent,
  10. DatasetComponent,
  11. TransformComponent,
  12. ToolboxComponent,
  13. LegendComponent,
  14. } from "echarts/components";
  15. // 标签自动布局,全局过渡动画等特性
  16. import { LabelLayout, UniversalTransition } from "echarts/features";
  17. // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
  18. import { CanvasRenderer } from "echarts/renderers";
  19. // 注册必须的组件
  20. echarts.use([
  21. TitleComponent,
  22. TooltipComponent,
  23. GridComponent,
  24. DatasetComponent,
  25. TransformComponent,
  26. ToolboxComponent,
  27. LegendComponent,
  28. LabelLayout,
  29. UniversalTransition,
  30. CanvasRenderer,
  31. LineChart,
  32. ]);
  33. // 导出
  34. export default echarts;

2.3.2 在main.js中全局挂载

  1. // 引入echarts
  2. import echarts from "@/common/echarts";
  3. // vue3的挂载方式(一个用于注册能够被应用内所有组件实例访问到的全局属性的对象。)
  4. app.config.globalProperties.$echarts = echarts;

2.3.3 在页面中使用

  1. <template>
  2. <div ref="echartDom"></div>
  3. </template>
  4. // 获取全局挂载的echarts
  5. const $echarts= getCurrentInstance().appContext.config.globalProperties.$echarts;
  6. // 获取echart挂载的dom
  7. const echartDom = ref();
  8. // 初始化echarts
  9. let myChart = $echarts.init(echartDom .value);
  10. // 图表配置爱
  11. const option = {};
  12. // 渲染
  13. myChart.setOption(option);

7756dc1bcce744648b89b5dceda76521.png

继续优化...

3.vite插件-vite-plugin-html

  • HTML 压缩能力
  • EJS 模版能力
  • 多页应用支持(未使用)
  • 支持自定义entry
  • 支持自定义template(未使用)

3.1 安装

npm i vite-plugin-html -D

3.2 vite.config.js配置

  1. import { createHtmlPlugin } from 'vite-plugin-html'
  2. export default defineConfig({
  3. plugins: [
  4. //压缩html, 配置EJS 模版
  5. createHtmlPlugin({
  6. minify: true, // 压缩html
  7. entry: 'src/main.js', // 自定义entry, index.html中不需要引入
  8. // 需要注入 index.html ejs 模版的数据
  9. inject: {
  10. data: {
  11. title: 'vite-project', // 模板中的<%- title %>
  12. injectScript: `<script src="./static/config.js"></script>`, // 出现在模版中的<%- injectScript %>
  13. }
  14. }
  15. }),
  16. ]
  17. })

3.3 在 index.html 中增加EJS标签

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <link rel="icon" type="image/svg+xml" href="/vite.svg" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title><%- title %></title>
  8. <!-- <script src="./config.js"></script> -->
  9. </head>
  10. <body>
  11. <div id="app"></div>
  12. <%- injectScript %>
  13. <!-- <script type="module" src="/src/main.js"></script> -->
  14. </body>
  15. </html>

4. vite插件 vite-plugin-vue-images

功能: 自动导入图片,引用页面省略import(如4.3.1所示)

注:build.sourcemap: true ,会破坏 map文件,待解决。

  1. WARN (vite-plugin-vue-images plugin) Sourcemap is likely to be incorrect:
  2. a plugin (vite-plugin-vue-images) was used to transform files,
  3. but didn't generate a sourcemap for the transformation.
  4. Consult the plugin documentation for help

4.1 安装

npm i vite-plugin-vue-images -D

4.2 vite.config.js配置

  1. //vite.config.js
  2. import { defineConfig } from 'vite'
  3. import ViteImages from 'vite-plugin-vue-images'
  4. export default defineConfig({
  5. plugins: [
  6. // 自动导入图片
  7. ViteImages({
  8. dirs: ['src/assets'], // 图像目录的相对路径
  9. extensions: ['jpg', 'jpeg', 'png', 'svg', 'webp'], // 有效的图像扩展
  10. customResolvers:[], // 覆盖名称->图像路径解析的默认行为
  11. customSearchRegex: '([a-zA-Z0-9]+)', // 重写搜索要替换的变量的Regex。
  12. })
  13. ]
  14. })

4.3 使用方式

4.3.1 页面引入

"ImagesVue" 为图片路径“images/vue.svg”,首字母大写;

  1. <template>
  2. <img :src="ImagesVue"/>
  3. </template>

4.3.2 图片所在位置

068c9879d826459e9eef80ed1c225324.png

4.3.3 页面展示

2979a863465e4f888b53c09d207edbc7.png

5.vite插件 unplugin-imagemin/vite

功能:图片压缩

5.1 安装

npm i unplugin-imagemin/vite -D

5.2 vite.config.js 配置 

  1. //vite.config.js
  2. import { defineConfig } from 'vite'
  3. import imagemin from 'unplugin-imagemin/vite';
  4. export default defineConfig({
  5. plugins: [
  6. imagemin({
  7. mode: "sharp",
  8. // mode: 'squoosh',
  9. compress: {
  10. jpeg: {
  11. // 0 ~ 100
  12. quality: 25,
  13. },
  14. png: {
  15. // 0 ~ 100
  16. quality: 25,
  17. },
  18. webp: {
  19. // 0 ~ 100
  20. quality: 25,
  21. },
  22. },
  23. conversion: [
  24. { from: "png", to: "webp" },
  25. { from: "jpeg", to: "png" },
  26. ],
  27. cache: false,
  28. }),
  29. ]
  30. })

6. vite插件 vite-plugin-compression

功能:文件压缩

注:开启gzip压缩后,服务器需要进行相关配置识别gz文件

6.1 安装

npm i vite-plugin-compression -D

 6.2 Vite.config.js配置

  1. //vite.config.js
  2. import { defineConfig } from 'vite'
  3. import viteCompression from 'vite-plugin-compression'
  4. export default defineConfig({
  5. plugins: [
  6. // 文件压缩
  7. viteCompression({
  8. algorithm: 'gzip',
  9. threshold: 10000, // js文件超出1000kb压缩
  10. verbose: false,
  11. deleteOriginFile: true
  12. })
  13. ]
  14. })

7. 配置打包文件分类输出

7.1 基础配置

  1. build: {
  2. rollupOptions: {
  3. output: {
  4. chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
  5. entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
  6. assetFileNames: '[ext]/[name]-[hash].[ext]', // 资源文件像 字体,图片等
  7. }
  8. }
  9. }

7.2 模块拆分

  1. build: {
  2. rollupOptions: {
  3. output: {
  4. chunkFileNames: 'assets/js/[name]-[hash].js', // 引入文件名的名称
  5. entryFileNames: 'assets/js/[name]-[hash].js', // 包的入口文件名称
  6. assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', // 资源文件像 字体,图片等
  7. // 模块化拆分包(一个模块一个js),可以不使用,会增加请求次数
  8. manualChunks(id) {
  9. if(id.includes('node_modules')) {
  10. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  11. }
  12. }
  13. }
  14. }
  15. }

最终成果(7.77MB-800KB)

1.bind.sourcemap: false 

2.图片压缩(第5步)

3.文件压缩(第6步)

先到这了,后续在学!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/392837
推荐阅读
相关标签
  

闽ICP备14008679号