• home > tools > Bundler > webpackTheory >

    webpack5 Module Federation学习杂记

    Author:zhoulujun Date:

    在独立的应用之间共享代码的可伸缩解决方案从未如此方便,而且几乎不可能大规模实现。此前我们拥有的最成熟方案是 externals 或 DLLPlug

    在独立的应用之间共享代码的可伸缩解决方案从未如此方便,而且几乎不可能大规模实现。此前我们拥有的最成熟方案是 externals 或 DLLPlugin(git submodule、npm包封装除外),它们强制把依赖集中于一个外部文件中。

    我们先来看一下 webpack 打包后的一些原理,这个也是后面理解 Module federation 的核心。




    什么是 Module Federation

    这个概念是由 Webpack5 核心开发者 Zack Jackson 提出的,他当时写了篇 文章 介绍的时候,是这样起的标题:

    Webpack 5 Module Federation: A game-changer in JavaScript architecture

    以及对其进行了描述

    Module federation allows a JavaScript application to dynamically run code from another bundle/build, on client and server.

    不仅可以动态地加载代码,同时还可以共享依赖(如果使用 federated module 的应用程序没有federated code 所需的依赖关系,Webpack将从该 federated 构建源下载缺失的依赖关系)。

    术语

    • Module federation: 适用于在浏览器或者 Node.js 中运行的 JavaScript 模块。

    • host:在页面加载过程中最先被初始化的 webpack 构建;

    • remote:部分被 “host” 消费的另一个 webpack 构建;

    • Bidirectional(双向的) hosts:当一个 bundle 或者 webpack build 作为一个 host 或 remote 运行时,它要么消费其他应用,要么被其他应用消费——均发生在运行时(runtime)。

    • shared: 共享模块是指既可重写的又可作为向嵌套容器提供重写的模块。它们通常指向每个构建中的相同模块,例如相同的库。



    参考文章:

    探索 webpack5 新特性 Module federation 在腾讯文档的应用 www.alloyteam.com/2020/04/14338

    https://medium.com/swlh/webpack-5-module-federation-a-game-changer-to-javascript-architecture-bcdd30e02669





    转载本站文章《webpack5 Module Federation学习杂记》,
    请注明出处:https://www.zhoulujun.cn/html/tools/Bundler/webpackTheory/9031.html