webpack进阶篇(二十):提取页面公共资源

简介: webpack进阶篇(二十):提取页面公共资源

说明

玩转webpack课程学习笔记。




基础库分离

  • 思路:将 react、react-dom 基础包通过 cdn 引⼊,不打⼊ bundle
  • ⽅法:使⽤ html-webpack-externals-plugin

安装插件npm i html-webpack-externals-plugin -D



1、不分离基础包


20200630212529675.png


2、分离基础包

分离之后业务代码js体积少了。

1、配置

const HtmlWebpackExternalsPlugin = require('html-webpack-externals-plugin');
module.exports = {
  plugins: [
    new HtmlWebpackExternalsPlugin({
      externals: [
        {
          module: 'react',
          entry: 'https://11.url.cn/now/lib/16.2.0/react.min.js',
          global: 'React',
        },
        {
          module: 'react-dom',
          entry: 'https://11.url.cn/now/lib/16.2.0/react-dom.min.js',
          global: 'ReactDom',
        }
      ],
    })
  ]
};


2、效果


20200630212559599.png



3、引入脚本

search文件里的index.html添加,浏览器访问即可,不加脚本就会报错

Uncaught ReferenceError: ReactDom is not defined


<!DOCTYPE html>
<html lang="en">
<head>
    <%= require('raw-loader!./meta.html') %>
    <title>Document</title>
    <script><%= require('raw-loader!babel-loader!../../node_modules/lib-flexible/flexible.js') %></script>
</head>
<body>
    <div id="root"></div>
    <script type="text/javascript" src="https://11.url.cn/now/lib/16.2.0/react.min.js"></script>
    <script type="text/javascript" src="https://11.url.cn/now/lib/16.2.0/react-dom.min.js"></script>
</body>
</html>




利⽤ SplitChunksPlugin 进⾏公共脚本分离


Webpack4 内置的,替代 CommonsChunkPlugin 插件


chunks 参数说明:

  • async 异步引⼊的库进⾏分离(默认)
  • initial 同步引⼊的库进⾏分离
  • all 所有引⼊的库进⾏分离(推荐)


module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'async',
      minSize: 30000, // 抽离的公共包最小的大小,单位字节
      maxSize: 0, // 最大的大小
      minChunks: 1, // 资源使用的次数(在多个页面使用到), 大于1, 最小使用次数
      maxAsyncRequests: 5, // 并发请求的数量
      maxInitialRequests: 3, // 入口文件做代码分割最多能分成3个js文件
      automaticNameMaxLength: 30, // 自动自动命名最大长度
      automaticNameDelimiter: '~', // 文件生成时的连接符
      name: true, //让cacheGroups里设置的名字有效
      cacheGroups: { //当打包同步代码时,上面的参数生效
        vendors: {
          test: /[\\/]node_modules[\\/]/, //检测引入的库是否在node_modlues目录下的
          priority: -10, //值越大,优先级越高.模块先打包到优先级高的组里
          filename: 'vendors.js'//把所有的库都打包到一个叫vendors.js的文件里
        },
        default: {
          minChunks: 2, // 上面有
          priority: -20, // 上面有
          reuseExistingChunk: true //如果一个模块已经被打包过了,那么再打包时就忽略这个上模块
        }
      }
    }
  }
};



利⽤ SplitChunksPlugin 分离基础包


1、test: 匹配出需要分离的包


2、配置

去掉html-webpack-externals-plugin的配置以及index.html里面脚本的引用


module.exports = {
  optimization: {
    splitChunks: {
      cacheGroups: {
        commons: {
          test: /(react|react-dom)/,
          name: 'vendors',
          chunks: 'all'
        }
      }
    }
  }
};


打包效果


20200630212642349.png


查看vendors文件

20200630212657763.png



利⽤ SplitChunksPlugin 分离⻚⾯公共⽂件


  • minChunks: 设置最⼩引⽤次数为2次
  • minSize: 分离的包体积的⼤⼩



配置

module.exports = {
  optimization: {
    splitChunks: {
      minSize: 0,
        cacheGroups: {
          commons: {
            name: 'commons',
            chunks: 'all',
            minChunks: 2
          }
        }
      }
    }
  }
};


1、在项目下新建文件夹common,里面添加index.js

export function common() {
  return 'common module';
}


2、然后search,以及index页面的index.js引用

import '../../common/index.js';


3、效果

20200630212716102.png


4、common.js

(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[,function(n,w,o){"use strict"}]]);


5、也可以改变一下minSize,minChunks的值看看能否打包出来common.js

目录
相关文章
|
JavaScript 前端开发
webpack基本配置,asset资源
webpack基本配置,asset资源
|
3月前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
91 1
|
4月前
|
前端开发
umi webpack配置图片资源转base64
umi webpack配置图片资源转base64
|
JavaScript
新员工webpack打包后上传服务器页面空白
新员工webpack打包后上传服务器页面空白
93 0
|
8月前
|
JSON JavaScript 前端开发
对webpack的理解——打包样式资源
对webpack的理解——打包样式资源
58 0
|
JavaScript 前端开发
vue+webpack项目动态设置页面title的方法
vue+webpack项目动态设置页面title的方法
|
前端开发 JavaScript
Vue--webpack打包css、image资源
Vue--webpack打包css、image资源
|
JavaScript
webpack + vuecli多页面打包基于(vue-template-admin)修改
webpack + vuecli多页面打包基于(vue-template-admin)修改
183 0
|
JavaScript
webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
252 0
webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
|
前端开发 JavaScript CDN
webpack优化篇(四十五):进一步分包:预编译资源模块
webpack优化篇(四十五):进一步分包:预编译资源模块
224 0
webpack优化篇(四十五):进一步分包:预编译资源模块