zoukankan      html  css  js  c++  java
  • 使用vue-cli打包项目时候的一些体积优化方法

    1.合理使用运行时依赖和开发依赖

    作为开发者,要合理区分哪些插件是项目上线运行后需要的,哪些是用于打包编译,压缩而运行时并不需要的,进行分类安装。开发依赖不会被打包进最终的项目文件,能大大减少项目文件大小。

    开发依赖在项目的package.json的devDependencies里,安装时使用的命令行:

    npm install xxx --save–dev 
    //简写
    npm i xxx -D

    运行时依赖在package.json的dependencies里,安装命令:

    npm install xxx --save
    //简写
    npm i xxx -S

    2.productionSourceMap: false

    在config的index.js文件下,找到productionSourceMap设置为false。项目打包后都会经过压缩和混淆等处理,这样的话调试时无法找到报错出现的位置,productionSourceMap是为了找到错误发生位置而设置的,但项目上线后面对的是用户而不是程序员,这个配置就没必要了。划重点,这个选项能很大程度减小项目体积,博主曾经一个项目打包处理后1M+,productionSourceMap设置为false后只有300k+。

    3.使用ui框架还要echart时按需引入

    ui框架里面会有很多封装好的组件,但很多时候我们需要的可能只有寥寥几个,那这时候就需要按需引入了,下面用element-ui做例子演示按需引入。

    1. 安装插件 babel-plugin-component
    2. .bablerc中配置
      {
        "presets": [
          ["env", {
            "modules": false,
            "targets": {
              "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
            }
          }],
          "stage-2"
        ],
        "plugins": [
          "transform-vue-jsx", 
          "transform-runtime",
          [
            "component",
            {
              "libraryName": "element-ui",
              "styleLibraryName": "theme-chalk"
            }
          ]
        ]
      }
    3. src文件夹下创建plugins文件夹,创建element-config.js,写入如下代码
      import Vue from 'vue'
      import {
        Button,
        Select,
        MessageBox
      } from 'element-ui'
      Vue.use(Button)
      Vue.use(Select)
      Vue.use(MessageBox)
      // 动态按需加载
      Vue.prototype.$alert = MessageBox.alert

      然后在main.js中写入import './plugin/element-config'

    4.productionGzip: true

    在config的index.js中找到productionGzip:设置为true。注意压缩前需要安装依赖CompressionWebpackPlugin。具体操作参考https://www.cnblogs.com/qixidi/p/10390759.html

    webpack.prod.conf.js中配置

    if (config.build.productionGzip) {
      const CompressionWebpackPlugin = require('compression-webpack-plugin')
    
      webpackConfig.plugins.push(
        new CompressionWebpackPlugin({
          filename: '[path].gz[query]',
          algorithm: 'gzip',
          test: /.(js|css|woff|ttf|json|txt|html|ico|svg)(?.*)?$/i,
          threshold: 10240,
          minRatio: 0.8, // 压缩比小于这个才压缩
          deleteOriginalAssets: true // 仅保留压缩的文件
        })
      )
    }

    5.使用路由懒加载

    更多的方法可参考:

    https://segmentfault.com/a/1190000019499007#articleHeader4

    https://www.jianshu.com/p/11c1d85ccd71

    https://www.jeffjade.com/2017/08/06/124-webpack-packge-optimization-for-volume/

    https://www.jianshu.com/p/171e8e529f35

    https://blog.csdn.net/song_de/article/details/81511284

  • 相关阅读:
    技术笔记3
    技术笔记2 jetty jboss
    技术笔记1前台
    日常笔记4
    日常笔记3
    日常笔记2
    日常笔记
    C语言——结构体
    用Java原子变量的CAS方法实现一个自旋锁
    Java中处理Linux信号量
  • 原文地址:https://www.cnblogs.com/AwenJS/p/12790584.html
Copyright © 2011-2022 走看看