vue打包体积优化

一、webpack-bundle-analyzer工具

1、安装

终端运行命令,根据包管理器自行选择命令

#npm
npm install --save-dev webpack-bundle-analyzer

#yarn
yard add -D webpack-bundle-analyzer

  

2、代码引入

将代码引入到vue.config.js

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

module.exports={
	configureWebpack:{
		plugins:[
			new BundleAnalyzerPlugin()
		]
	},
	publicPath:process.env.NODE_ENV === "production" ? "/":"/",
	devServer:{
		host:'localhost',
		port:port,
		open:true,
	},
	
}

  

3、命令

引入完成执行 npm run build --report 命令,命令执行完会自动打开浏览器页面,如图:

start:打包之前输出文件大小

prased:打包之后输出文件大小

gizppen:开启gzip压缩后输出文件大小

 

4、减小打包体积,删除多余包

#删除多余包 
npm uninstall [包名]

#例
npm uninstall tinymce

  

5、常见问题

报错: npm error:Maximum call stack size exceeded

删除 node_module,执行命令:npm cache clean --force , npm install ,在执行命令前可以把package.json中的tinymce删除。

 

二、babel-plugin-component工具

1、安装

终端运行命令

#npm
npm install babel-plugin-component -D

 

2、代码引入

将代码引入到babel.config.js,以ElementUi 为例

module.exports = {
    presets: [
        ["@babel/preset-env", { "modules": false }]
    ],
    "plugins": [
        [
            "component",
            {
                "libraryName": "element-ui",
                "styleLibraryName": "theme-chalk"
            }
        ]
    ]
}

  

3、命令

执行打包命令,查看体积 npm run build --report

 

三、compression-webpack-plugin工具(gzip压缩代码)

1、安装

终端运行命令

#npm
npm install compression-webpack-plugin -D

  

2、代码引入

将代码引入到vue.config.js

const CompressionWebpackPlugin = require('compression-webpack-plugin')
module.exports = {
  chainWebpack: config => {
     // 对超过10kb的文件gzip压缩
      config.plugin('compressionPlugin').use(
         new CompressionWebpackPlugin({
            test: /\.(js|css|html)$/,// 匹配文件名
            threshold: 10240,
         })
      )
  }
}

  

3、命令

执行打包命令,查看打包文件,npm run build,产生压缩文件既开启成功

 

4、nginx配置

服务端开启gzip功能,加入代码

server{
    //开启和关闭gzip模式
	gzip on;
	//gizp压缩起点,文件大于2k才进行压缩;设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。 默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
	gzip_min_length 2k;
	// 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
	gzip_buffers 4 16k;
	// 设置gzip压缩针对的HTTP协议版本
	gzip_http_version 1.0;
	// gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
	gzip_comp_level 2;
	//进行压缩的文件类型
	gzip_types text/plain application/javascript text/css application/xml;
	// 是否在http header中添加Vary: Accept-Encoding,建议开启
	gzip_vary on;
}

  

5、发布资源,检测gzip是否开启成功

可借用工具检测:链接

6、常见问题

报错:Cannot read property ‘tapPromise’ of undefined ,compression-webpack-plugin版本问题,不可以使用最新版本,需指定版本下载

#先执行卸载命令
npm uninstall compression-webpack-plugin

#执行安装命令
npm i compression-webpack-plugin@6.1.1

  

四、清除console日志

1、安装

终端运行命令

#npm
npm install babel-plugin-transform-remove-console --save-dev

  

2、代码引入

将代码引入到babel.config.js

// 这是项目发布阶段需要用到的bebel插件
const prodPlugins = []
// 如果是发布阶段,处于生产环境,就向prodPlugins数组里添加一个插件
if (process.env.NODE_ENV === 'production') {
  prodPlugins.push('transform-remove-console')
}
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: [
    ...prodPlugins // 这里...展开运算符,把上面定义的prodPlugins数组里面的每一项展开添加到这个plugins数组里面
  ]
}

  

posted @ 2023-10-31 10:49  北漂生活  阅读(589)  评论(0编辑  收藏  举报