vite3+vue3打包优化

阅读数:457 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、build视图分析依赖文件

分析项目中的文件大小及引用情用情况,是优化前的重要一步,从而采取文件分包、cdn引入等相关技术。

Rollup Plugin Visualizer是一个依赖分析插件,它提供了多种模式的依赖分析。

1、安装

npm install --save-dev rollup-plugin-visualizer

2、配置

安装完成后,即可在vite下的插件属性中进行配置

import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
  plugins: [vue(), visualizer({
    emitFile: false,
    file: "stats.html", //分析图生成的文件名
    open:true //如果存在本地服务端口,将在打包后自动展示
  })],
})

然后执行npm  run build就可以查看依赖图了。

3、配置参数

filename/file string 生成分析的文件名
title string html标签页标题
open boolean 以默认服务器代理打开文件
template string 可选择的图表类型
gzipSize boolean 搜集gzip压缩包的大小到图表
BrotliSize boolean 搜集brotli压缩包的大小到图表
emitFile boolean 使用emitFile生成文件,简单说,这个属性为true,打包后的分析文件会出现在打包好的文件包下,否则就会在项目目录下
sourcemap boolean 使用sourcemap计算大小
projectRoot string, RegExp  文件的根目录,默认在打包好的目录下

二、第三方CDN引入

cdn管理插件我们使用vite-plugin-cdn-import

1、安装

npm install vite-plugin-cdn-import --save-dev

2、配置

// vite.config.js 基本用法
import reactRefresh from '@vitejs/plugin-react-refresh'
import importToCDN from 'vite-plugin-cdn-import'

export default {
    plugins: [
        importToCDN({
            modules: [
                {
                    name: 'react',
                    var: 'React',
                    path: `umd/react.production.min.js`,
                },
                {
                    name: 'react-dom',
                    var: 'ReactDOM',
                    path: `umd/react-dom.production.min.js`,
                },
            ],
        }),
    ],
}

三、依赖文件分包

在我们没有配置构建工具的分包功能时,构建出来的build将无比巨大且是独立的js和css文件,这样就会存在本地加载文件的压力。主要使用的rollup配置:

1、静态文件按类型分包

build: {
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
      }
    }
  }

2、超大静态资源拆分

build里的output设置内,添加以下代码

manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        }

// 另一种写法
manualChuncks: {
  自定义包名: ['loadash','vue'],
}

四、gzip压缩文件

1、安装vite-plugin-compression

npm i vite-plugin-compression -D

vite-plugin-compression使用gzip或者brotli来压缩资源。

2、配置

import viteCompression from 'vite-plugin-compression';
export default defineConfig({
  plugins: [vue(), viteCompression({
    verbose: true, //是否在控制台输出压缩结果
    disable: false, //是否禁用,相当于开关在这里
    threshold: 10240, //体积大于 threshold 才会被压缩,单位 b,1b=8B, 1B=1024KB  那我们这里相当于 9kb多吧,就会压缩
    algorithm: 'gzip', //压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
    ext: '.gz', //文件后缀
    )}
 ]
)}

3、nginx开启静态资源压缩

gzip_static on;

五、vite build下去除console、debug等无效

vite.config.tsbuild下必须配置minify(压缩方式)

build:{
    minify: "terser",
	terserOptions: {
   		compress: {
      		drop_console: true,
     	 	drop_debugger: true
   		}
	}
}

而如果使用esbuild来构建如果去掉consoledebugger呢.

 esbuild:{
    drop: command==='build'? ["console","debugger"]:[],
},



相关推荐

一、生命周期 1、vue2生命周期 beforeCreate #实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用 created #实例创建完成后被立即同步调用 beforeMount #

一、使用pnpm新建项目 可以使用npm 或yarn或pnpm来初始化Vite项目 pnpm create vite xxx(项目名称) #选择vue #选择js cd xxx (进入项目目录) #安

一、概述 <script setup> 是在单文件组件(SFC)中使用组合式API的编译时语法糖,解决Vue3.0中setup需要频繁将声明的变量、函数以及import引入的内容通过return向外

一、概述 在vue2中,data函数里返回的值直接为响应式,但在vue3中我们需要使用一些函数才能达到这个效果。 setup函数中拿不到vue的this。 二、常用函数 <template> <d

<script> export default { setup() { const func1= () => { console.log("func1");

缓存页面主要Jul为了防止重复渲染dom,减少加载时间及性能消耗,提高用户体验。 一、旧版的语法 <keep-alive> <router-view v-if="$route.meta.kee

一、在main.js挂载 import { createApp } from 'vue' import App from './App.vue' import router from './route

一、概述 在vue3中没有$refs这个对象,可以使用如下方法 <template> <div><input type="text" ref="txt1" value="hello" /></div>

方式一、全局引入 全局引入element之后事,element已经在app.config.globalProperties添加了全局方法$message,所以可以在组件中直接使用。 方式二、按需引入

一、useRouter传参的方式 1、隐匿传参params import { useRouter } from 'vue-router' export default { setup() {