webpack 5 的主要升级点有哪些?

Webpack 5 的主要升级点详解

Webpack 5 带来了许多重要的功能改进和新特性,这些升级显著提升了 Webpack 的性能和灵活性。以下是每个主要升级点的详细说明:

1. 模块联邦 (Module Federation)

详解

模块联邦允许多个独立的 Webpack 构建共享代码和依赖。这对微前端架构尤其有用,因为它使得不同的团队可以独立开发、部署和更新自己的模块,而无需重新打包整个应用。

用法示例

在 Webpack 配置中,可以这样配置模块联邦:

const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'app1',
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/Button',
      },
      remotes: {
        app2: 'app2@http://localhost:3002/remoteEntry.js',
      },
      shared: ['react', 'react-dom'],
    }),
  ],
};

2. 改进的 Tree Shaking

详解

Tree Shaking 是移除未使用代码的过程。Webpack 5 对 Tree Shaking 做了多项改进,支持命名空间导出和动态导入,更智能地分析和移除未使用的代码,从而减少最终打包的文件大小。

用法示例

确保你的项目使用 ES6 模块语法,并在生产模式下打包:

// 在 package.json 中
{
  "scripts": {
    "build": "webpack --mode production"
  }
}

3. 持久化缓存 (Persistent Caching)

详解

持久化缓存将构建结果缓存到文件系统中,以便在后续构建中重用这些结果,从而显著减少构建时间。Webpack 5 默认启用文件系统缓存。

用法示例

在 Webpack 配置中启用文件系统缓存:

module.exports = {
  cache: {
    type: 'filesystem',
  },
};

4. 内置提升 (Built-in Improvements)

详解

Webpack 5 默认内置了许多性能提升和改进:

  • 文件系统缓存:默认启用持久化缓存,提升构建性能。
  • 更好的长期缓存:增强内容散列(content hashing),确保文件名在内容变化时才会更新,优化缓存策略。
  • 更快的解析:改进了依赖解析算法,提高了构建速度。

用法示例

这些内置提升不需要额外配置,只需确保使用 Webpack 5。

5. 移除 Node.js Polyfills

详解

Webpack 5 移除了对 Node.js 核心模块的自动 polyfill 支持。这意味着,如果你的代码依赖于 Node.js 核心模块(如 buffercrypto 等),需要手动安装相应的 polyfill。

用法示例

手动安装并配置 polyfill:

npm install buffer
// 在 Webpack 配置中
module.exports = {
  resolve: {
    fallback: {
      buffer: require.resolve('buffer'),
    },
  },
};

6. 更好的代码分割 (Code Splitting)

详解

Webpack 5 对代码分割功能进行了改进,使得按需加载和异步加载更加高效,减少初始加载时间并优化用户体验。

用法示例

使用动态导入进行代码分割:

// 动态导入模块
import('./module').then((module) => {
  module.default();
});

配置 Webpack 进行代码分割:

module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
};

7. 原生支持 WebAssembly

详解

Webpack 5 提供了对 WebAssembly 的原生支持,可以直接导入和使用 WebAssembly 模块,无需额外配置。

用法示例

直接导入 WebAssembly 模块:

import wasmModule from './module.wasm';

wasmModule().then((instance) => {
  console.log(instance.exports);
});

8. 改进的开发体验

详解

Webpack 5 提供了更好的开发体验,包括改进的日志输出、更直观的错误提示和警告信息,使开发者能够更快速地定位和解决问题。

用法示例

通过设置 Webpack 配置中的 stats 选项,可以自定义日志输出:

module.exports = {
  stats: {
    colors: true,
    reasons: true,
    chunks: false,
  },
};

9. 新的配置选项和 API

详解

Webpack 5 引入了许多新的配置选项和 API,增强了可配置性和灵活性。例如,新的 experiments 配置允许启用实验性功能,output.clean 配置可以在构建前清理输出目录。

用法示例

启用顶层 await 和清理输出目录:

module.exports = {
  experiments: {
    topLevelAwait: true,
  },
  output: {
    clean: true, // 在构建前清理输出目录
  },
};

总结

Webpack 5 带来了许多重要的升级和改进,包括模块联邦、改进的 Tree Shaking、持久化缓存、原生 WebAssembly 支持和更好的代码分割。通过这些新特性,Webpack 5 提供了更高效、更灵活的打包方案,提升了前端开发的性能和体验。了解和掌握这些新特性,能够帮助开发者更好地使用 Webpack 5 构建现代化的前端应用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 近年来前端技术如雨后春笋般蓬勃发展,我们也在这个潮流下不断地学习、成长。前端技术的不断发展,给我们提供了许多的便利...
    bo_bo_bo_la阅读 4,621评论 2 2
  • webpack4中的新特性 webpack3官方发布的时候,提到了下个版本可能的改动点,翻译过来如下所示: 高性能...
    little_short阅读 1,311评论 0 2
  • Webpack 5 发行版 (2020-10-10) webpack 4在2018年二月份发行。在那以后我们封装了...
    广兰路地铁阅读 928评论 0 0
  • 一:AOT 与在浏览器中完成编译的JIT编译相反,AOT在构建过程中编译了很多代码(也称为脱机编译),从而减少了客...
    皮卡许阅读 993评论 0 0
  • 前言 webpack5正式发布已经大半年了,一直囔囔着要去看看这次更新带来了哪些新特性,但是因为实在是太(xue)...
    CBDxin阅读 1,819评论 0 2