vue打包文件分析

1,797 阅读1分钟

安装打包分析插件

npm install webpack-bundle-analyzer -S

根目录下新建 .env.analyzer 文件,内容如下:

NODE_ENV = production
ANALYZE_MODE = "analyze"

package.jsonscript 下添加以下代码:

"scripts": {
    // ···
    "build:analyze": "vue-cli-service build --mode analyze",
}

vue.config.js 文件添加配置

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
// 环境变量的引入
const isAnalyzeMode = !!process.env.ANALYZE_MODE
module.exports = {
    configureWebpack: (config) => {
        if (isAnalyzeMode) {
          config.plugins.push(
            new BundleAnalyzerPlugin({
              // 生成静态文件
              analyzerMode: 'static',
            })
          )
        }
    }
}

运行命令 npm run build:analyze ,自动打开分析好的文件,效果如下:

image.png

生产环境部分资源使用CDN加速

Saticfile CDN: www.staticfile.org/

Vue 打包过大,可以考虑将代码中大型依赖使用CDN资源代替,例如 Vue、Element UI等资源。

p配置 vue.config.js 文件

module.exports = {
  chainWebpack: (config) => {
    config
      .when(process.env.NODE_ENV !== 'development',
        config => {
          // 设置哪些资源不需要被打包,改为获取cdn资源
          config.set('externals', {
            'vue': 'Vue',
            'vue-router': 'VueRouter',
            'axios': 'axios',
            'element-ui': 'ELEMENT',
            'echarts': 'echarts',
            'highlight.js': "window.hljs",
          })

          // 给index.html传参
          config.plugin('html').tap(args => {
            args[0].name = '项目标题
            args[0].useCdn = true
            return args
          })
        }
      )
  }
}

配置 index.html 文件

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="renderer" content="webkit">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <title><%= htmlWebpackPlugin.options.name %></title>
</head>

<body>
  <div id="app"></div>

  <% if(htmlWebpackPlugin.options.useCdn==true) { %>
  <script src="https://cdn.staticfile.org/vue/2.6.12/vue.min.js"></script>
  <script src="https://cdn.staticfile.org/vue-router/3.4.9/vue-router.min.js"></script>
  <script src="https://cdn.staticfile.org/axios/0.21.0/axios.min.js"></script>
  <script src="https://cdn.staticfile.org/element-ui/2.14.1/index.min.js"></script>
  <script src="https://cdn.staticfile.org/echarts/5.0.1/echarts.min.js"></script>
  <script src="https://cdn.staticfile.org/highlight.js/10.4.1/highlight.min.js"></script>
  <% } %>
</body>

</html>