zoukankan      html  css  js  c++  java
  • vuecli 4 打包优化

    目的:

    • 提高打包速度
    • 减小项目体积、提高首屏加载速度
    • 提高用户体验(骨架屏)

    1.使用CDN 加速优化

    cdn优化是指把第三方库比如(vue,vue-router,axios)通过cdn的方式引入项目中,这样vendor.js会显著减少,并且大大提升项目的首页加载速度。

    2.图片压缩

    需要下载 image-webpack-loader

    npm install image-webpack-loader --save-dev
    module.exports = {
      // image 压缩 定义在chainWebpack中
     chainWebpack: config => {
       config.module
          .rule('images')
          .use('image-webpack-loader')
          .loader('image-webpack-loader')
          .options({
            bypassOnDebug: true
          })
          .end()}
    }

    此插件容易下载失败,可以通过cnpm淘宝镜像安装

    cnpm install --save-dev image-webpack-loader

    3、公共代码抽离

    如何提取公共代码?

    从webpack4开始官方移除了commonchunk插件,改用了optimization属性进行更加灵活的配置,这也应该是从V3升级到V4的代码修改过程中最为复杂的一部分。

    splitChunks: {
        chunks: "async”,//默认作用于异步chunk,值为all/initial/async/function(chunk),值为function时第一个参数为遍历所有入口chunk时的chunk模块,chunk._modules为chunk所有依赖的模块,通过chunk的名字和所有依赖模块的resource可以自由配置,会抽取所有满足条件chunk的公有模块,以及模块的所有依赖模块,包括css
        minSize: 30000,  //表示在压缩前的最小模块大小,默认值是30kb
        minChunks: 1,  // 表示被引用次数,默认为1;
        maxAsyncRequests: 5,  //所有异步请求不得超过5个
        maxInitialRequests: 3,  //初始话并行请求不得超过3个
       automaticNameDelimiter:'~',//名称分隔符,默认是~
        name: true,  //打包后的名称,默认是chunk的名字通过分隔符(默认是~)分隔
        cacheGroups: { //设置缓存组用来抽取满足不同规则的chunk,下面以生成common为例
           common: {
             name: 'common',  //抽取的chunk的名字
             chunks(chunk) { //同外层的参数配置,覆盖外层的chunks,以chunk为维度进行抽取
             },
             test(module, chunks) {  //可以为字符串,正则表达式,函数,以module为维度进行抽取,只要是满足条件的module都会被抽取到该common的chunk中,为函数时第一个参数是遍历到的每一个模块,第二个参数是每一个引用到该模块的chunks数组。自己尝试过程中发现不能提取出css,待进一步验证。
             },
            priority: 10,  //优先级,一个chunk很可能满足多个缓存组,会被抽取到优先级高的缓存组中
           minChunks: 2,  //最少被几个chunk引用
           reuseExistingChunk: true,//  如果该chunk中引用了已经被抽取的chunk,直接引用该chunk,不会重复打包代码
           enforce: true  // 如果cacheGroup中没有设置minSize,则据此判断是否使用上层的minSize,true:则使用0,false:使用上层minSize
           }
        }
    }

    公共模块抽离

    举例:

    项目中分别有a.js, b.js, page1.js, page2.js这四个JS文件, page1.js 和
    page2.js中同时都引用了a.js, b.js, 这时候想把a.js, b.js抽离出来合并成一个公共的js,然后在page1,page2中自动引入这个公共的js,怎么配置呢?

    第三方模块抽离

    页面中有时会引入第三方模块,比如import $ from 'jquery';
    page1中需要引用,page2中也需要引用,这时候就可以用vendor把jquery抽离出来。

    如下:

    // 公共代码抽离
    configureWebpack: config => {
    //....
    //优化项配置
    config.optimization = {
        splitChunks: { // 分割代码块
            cacheGroups: {
                vendor: {//第三方库抽离
                    chunks: 'all',
                    test: /node_modules/,
                    name: 'vendor',
                    minChunks: 1,//在分割之前,这个代码块最小应该被引用的次数
                    maxInitialRequests: 5,
                    minSize: 0,//大于0个字节
                    priority: 100//权重
                },
                common: {  //公用模块抽离
                    chunks: 'all',
                    test: /[\\/]src[\\/]js[\\/]/,
                    name: 'common',
                    minChunks: 2,在分割之前,这个代码块最小应该被引用的次数
                    maxInitialRequests: 5,
                    minSize: 0,//大于0个字节
                    priority: 60
                },
                styles: { //样式抽离
                    name: 'styles',
                    test: /\.(sa|sc|c)ss$/,
                    chunks: 'all',
                    enforce: true
                },
                runtimeChunk: {
                    name: 'manifest'
                }
            }
        }
    }
    }
  • 相关阅读:
    如何在SQLite中创建自增字段?
    Windows XP平台下编译boost[1.47及以上]
    智能指针的向下转型
    采用Boost::filesystem操作文件
    CodeSmith访问数据库
    std::string的一些操作
    PDF加入内嵌字体
    悟空和唐僧的对话
    收获和教训的一天配置ds1401
    vxworks的一个changlog
  • 原文地址:https://www.cnblogs.com/zjianfei/p/15031666.html
Copyright © 2011-2022 走看看