webpack优化实践:使用IgnorePlugin优化moment第三方包

1,741 阅读1分钟

webpack优化实践:使用IgnorePlugin优化moment第三方包

webpack5

1. IgnorePlugin是什么?有什么用?

  • IgnorePlugin是webpack的一个内置插件,用于:忽略第三方包指定目录,让这些目录不要被打包进去。
  • 比如:我们使用 moment.js,直接引用后,里边有大量的 i18n 的代码,导致最后打包出来的文件比较大,而实际场景并不需要这些 i18n 的代码,这时我们可以使用 IgnorePlugin 来忽略掉这些代码文件

2. 使用举例

2.1 优化前

  • 安装moment

  • 在入口文件中写如下代码

    import moment  from 'moment'
    moment.locale('zh-cn')    // 指定语言是中文const result = moment().format('MMMM Do YYYY, h:mm:ss a');
    console.log(result);
    
  • 打包结果: 多了很多不必要的语言,但我们只需要使用中文

    image-20220612070920555.png

  • 运行结果: 正常,可以在运行网页的控制台中看到输入

    image-20220612071100837.png

2.2 优化

  • 修改webpack插件配置使用IgnorePlugin

    moment这个库中,如果引用了./locale/目录的内容,就忽略掉,不会打包进去

    new webpack.IgnorePlugin({
        resourceRegExp: /^./locale$/,
        contextRegExp: /moment$/,
    })
    
  • 修改代码,显示引入zh-cn

    // 添加这行代码:手动引入所需要的中文语言包
    import 'moment/locale/zh-cn';
    ​
    import moment  from 'moment'
    moment.locale('zh-cn')
    ​
    const result = moment().format('MMMM Do YYYY, h:mm:ss a');
    console.log(result);
    

2.3 优化后的效果

  • 打包结果:体积变小,不在有那些根本用不到的语言包了

    image-20220612071737589.png

  • 运行结果:仍然可以在浏览器中看到如下输出

    image-20220612071100837.png