webpack_vue打包优化

简介: webpack_vue打包优化

@TOC

前后对比

6.45Mb 未进行gzip压缩 图片压缩和去掉打印等等
image.png

压缩过后1.43Mb
image.png

开启cdn,不打包vue\element\echarts\,,打包下来225.25k
image.png

使用compression-webpack-plugin

在prod.conf中配置,打包多出gzip的文件

//gzip打包优化
if (config.build.productionGzip) {
   
   
  const CompressionWebpackPlugin = require("compression-webpack-plugin");
  webpackConfig.plugins.push(
    new CompressionWebpackPlugin({
   
   
      filename: "[path].gz[query]",
      algorithm: "gzip",
      test: new RegExp(
        "\\.(" + config.build.productionGzipExtensions.join("|") + ")$"
      ),
      threshold: 2000,
      minRatio: 0.8,
    })
  );
}

nginx配置server
nginx.conf

gzip on;  #是否开启gzip模块 on表示开启 off表示关闭
gzip_buffers 4 16k;  #设置压缩所需要的缓冲区大小
gzip_comp_level 6;  #压缩级别1-9,数字越大压缩的越好,也越占用CPU时间
gzip_min_length 100k;  #设置允许压缩的最小字节
gzip_http_version 1.1;  #设置压缩http协议的版本,默认是1.1
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  #设置压缩的文件类型
gzip_vary on;  #加上http头信息Vary: Accept-Encoding给后端代理服务器识别是否启用 gzip 压缩

压缩图片

可以使用插件image-webpack-loader进行压缩

使用webpack-bundle-analyzer

打包分析工具

if (config.build.bundleAnalyzerReport) {
   
   
  const BundleAnalyzerPlugin =
    require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
    webpackConfig.plugins.push(new BundleAnalyzerPlugin());
}

使用uglifyjs-webpack-plugin

去掉console

  const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
  let optimization = [
    new UglifyJsPlugin({
   
   
      uglifyOptions: {
   
   
        compress: {
   
   
          warnings: false,
          drop_debugger: true, //去掉debugger
          drop_console: true, // 去掉console
          pure_funcs: ["console.log"], // 移除console
        },
      },
      sourceMap: config.build.productionSourceMap,
      parallel: true,
    }),
  ];
  webpackConfig.plugins.push(...optimization);

cdn方式

cdn推荐
https://www.bootcdn.cn/

使用html-webpack-plugin

html-webpack-plugin可以将变量写入html作为链接用
取消vue、element、axios和echarts的打包
再prod.conf配置
声明

// cdn 引入
const externalModules = {
   
   
  'vue': 'Vue',
  'vue-router': 'VueRouter',
  'vuex': 'Vuex',
  'axios':'axios',
  'element-ui':'element-ui',
  'echarts':'echarts',
  'hljs':'highlight.js'
}
//cdn 配置
const externalConfig=[
  {
   
   js:'https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js',css:''},
  {
   
   js:'https://cdn.bootcdn.net/ajax/libs/vue-router/3.0.1/vue-router.min.js',css:''},
  {
   
   js:'https://unpkg.com/axios/dist/axios.min.js',css:''},
  {
   
   js:'https://cdn.bootcss.com/vuex/3.6.2/vuex.min.js',css:''},
  {
   
   js:'https://unpkg.com/element-ui/lib/index.js',css:'https://unpkg.com/element-ui/lib/theme-chalk/index.css'},
  {
   
   js:'https://cdn.jsdelivr.net/npm/echarts@5.3.3/dist/echarts.min.js',css:''},
  {
   
   js:'https://cdn.bootcdn.net/ajax/libs/highlight.js/11.6.0/highlight.min.js',}
]

使用html-webpack-plugin
传递参数 externalConfig

    new HtmlWebpackPlugin({
   
   
      filename:
        process.env.NODE_ENV === "testing" ? "index.html" : config.build.index,
      template: "index.html",
      inject: true,
      minify: {
   
   
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true,
        // more options:
        // https://github.com/kangax/html-minifier#options-quick-reference
      },
      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
      chunksSortMode: "dependency",
      cdnConfig: externalConfig, // cdn配置
    }),

在html入口写入cdn链接

<!--    cdn -->
    <% htmlWebpackPlugin.options.cdnConfig.forEach(function(item){
    
     if(item.css){
    
     %>
    <link href="<%= item.css %>" rel="stylesheet" />
    <% }}) %>
  <!-- cdn -->
  <% htmlWebpackPlugin.options.cdnConfig.forEach(function(item){
    
     if(item.js && !htmlWebpackPlugin.options.onlyCss){
    
     %>
  <script type="text/javascript" src="<%= item.js %>"></script>
  <% }}) %>

结束

网站:https://yongma16.xyz/#/
开启gzip成功
image.png

目录
相关文章
|
2月前
|
缓存 前端开发 JavaScript
Webpack与Babel的进阶配置与优化
通过以上的进阶配置和优化策略,可以更好地发挥`Webpack`与`Babel`的功能,提高项目的性能和开发效率。
|
5月前
|
缓存 前端开发 数据可视化
Webpack Bundle Analyzer:深入分析与优化你的包
Webpack Bundle Analyzer是一款可视化工具,帮助分析Webpack构建结果,找出占用空间较大的模块以便优化。首先需安装Webpack和Webpack Bundle Analyzer,接着在`webpack.config.js`中配置插件。运行Webpack后,会在`dist`目录生成`report.html`,展示交互式图表分析包大小分布。为优化可采用代码分割、Tree Shaking、压缩插件、加载器优化、模块懒加载、代码预热、提取公共库、使用CDN、图片优化、利用缓存、避免重复模块、使用Source Maps、优化字体和图标、避免全局样式污染以及优化HTML输出等策略。
178 3
|
2月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
64 6
|
2月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
80 7
|
2月前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
60 2
|
4月前
|
JavaScript
webpack打包TS
webpack打包TS
139 60
|
3月前
|
缓存 前端开发 JavaScript
Webpack 打包的基本原理
【10月更文挑战第5天】
|
3月前
|
前端开发 JavaScript
ES6模块化和webpack打包
【10月更文挑战第5天】
|
3月前
|
缓存 前端开发 JavaScript
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
|
4月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
193 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)