• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Webpack提取页面公共资源

武飞扬头像
aiguangyuan
帮助2

1. 利用html-webpack-externals-plugin 分离基础库

在做React开发时,经常需要引入react和react-dom基础库,这样在打包的时候速度就会比较慢,这种情况下我们可以将这些基础库忽略掉,将它们通过CDN的方式直接引入,而不打包到bundle文件里面去。

1. 安装插件

npm i html-webpack-externals-plugin -D

2. 引入插件

const HtmlWebpackExternalsPlugin = require('html-webpack-externals-plugin');

3. 使用插件

在 webpack 中配置如下:

  1.  
    module.exports = {
  2.  
     
  3.  
    // 其它配置项此处略
  4.  
     
  5.  
    plugins: [
  6.  
    new HtmlWebpackExternalsPlugin({
  7.  
    externals: [
  8.  
    {
  9.  
    module: 'react',
  10.  
    entry: 'https://11.url.cn/now/lib/16.2.0/react.min.js',
  11.  
    global: 'React',
  12.  
    },
  13.  
    {
  14.  
    module: 'react-dom',
  15.  
    entry: 'https://11.url.cn/now/lib/16.2.0/react-dom.min.js',
  16.  
    global: 'ReactDOM',
  17.  
    },
  18.  
    ]
  19.  
    }),
  20.  
     
  21.  
    ]
  22.  
    };

在根页面 index.html 文件中引入基础库:

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.  
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.  
    <title>分离基础库</title>
  8.  
    </head>
  9.  
    <body>
  10.  
     
  11.  
    <div id="root"></div>
  12.  
     
  13.  
    <!-- 引入基础库 -->
  14.  
    <script type="text/javascript" src="https://11.url.cn/now/lib/16.2.0/react.min.js"></script>
  15.  
    <script type="text/javascript" src="https://11.url.cn/now/lib/16.2.0/react-dom.min.js"></script>
  16.  
     
  17.  
    </body>
  18.  
    </html>

2. 利用SplitChunksPlugin 分离基础库

此插件是Wabpack4内置的,无需安装,用于替代CommonsChunkPlugin插件。

  1.  
    module.exports = {
  2.  
    optimization: {
  3.  
    splitChunks: {
  4.  
    cacheGroups: {
  5.  
    commons: {
  6.  
    // 匹配出需要分离的包
  7.  
    test: /(react|react-dom)/,
  8.  
    name: 'vendors',
  9.  
    chunks: 'all'
  10.  
    }
  11.  
    }
  12.  
    }
  13.  
    }
  14.  
    };

分离出来的文件名前辍为vendors,也要进行配置。

学新通

3. 利用SplitChunksPlugin 分离依赖包

此插件是Wabpack4内置的,无需安装,用于替代CommonsChunkPlugin插件。

  1.  
    module.exports = {
  2.  
    optimization: {
  3.  
    splitChunks: {
  4.  
    // 同步还是异步
  5.  
    chunks: 'async',
  6.  
    // 抽离公共包最小的大小(KB)
  7.  
    minSize: 30000,
  8.  
    // 抽离公共包最大的大小(KB)
  9.  
    maxSize: 0,
  10.  
    // 方法最小使用次数
  11.  
    minChunks: 1,
  12.  
    // 浏览器每次请求异步资源的次数
  13.  
    maxAsyncRequests: 5,
  14.  
    maxInitialRequests: 3,
  15.  
    automaticNameDelimiter: '~',
  16.  
    name: true,
  17.  
    cacheGroups: {
  18.  
    vendors: {
  19.  
    test: /[\\/]node_modules[\\/]/,
  20.  
    priority: -10
  21.  
    }
  22.  
    }
  23.  
    }
  24.  
    }
  25.  
    };

chunks 参数说明:

1. async 异步引入的库进行分离(默认);

2. initial  同步引入的库进行分离 ;

3. all 所有引入的库进进分离(推荐);

4. 利用SplitChunksPlugin 分离页面公共文件

此插件是Wabpack4内置的,无需安装,用于替代CommonsChunkPlugin插件。

  1.  
    module.exports = {
  2.  
    optimization: {
  3.  
    splitChunks: {
  4.  
    // 分离的包体积的⼤⼩
  5.  
    minSize: 0,
  6.  
    cacheGroups: {
  7.  
    commons: {
  8.  
    name: 'commons',
  9.  
    chunks: 'all',
  10.  
    // 最⼩引⽤次数为2次
  11.  
    minChunks: 2
  12.  
    }
  13.  
    }
  14.  
    }
  15.  
    }
  16.  
    };

分离出来的文件名前辍为commons,也要进行配置。

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiabkgc
系列文章
更多 icon
同类精品
更多 icon
继续加载