【微前端】手把手教你从0到1实现基于Webpack5 模块联邦(Module Federation)的微前端~(下)

简介: 【微前端】手把手教你从0到1实现基于Webpack5 模块联邦(Module Federation)的微前端~(下)

2.5.2 引入到 container 中

container/webpack.config.js 中增加:
image.png

const HtmlWebpackPlugin = require("html-webpack-plugin");
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
  mode: "development",
  devServer: {
    port: 8080,
  },
  plugins: [
    new ModuleFederationPlugin({
      name: "container",
      remotes: {
        microFrontEnd1: "microFrontEnd1@http://localhost:8081/remoteEntry.js",
        microFrontEnd2: "microFrontEnd2@http://localhost:8082/remoteEntry.js",
      },
    }),
    new HtmlWebpackPlugin({
      template: "./public/index.html",
    }),
  ],
};

container/src/bootstrab.js 中添加以下导入:image.png

import "microFrontEnd1/MicroFrontEnd1Index";
import "microFrontEnd2/MicroFrontEnd2Index";
console.log("Container!");

container/public/index.html 中,添加一个 idmicro-front-end-2div
image.png

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
  <div id="root"></div>
  <h1>** The second Micro Frontend **</h1>
  <div id="microFrontend2"></div>
</body>
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cfa6d4ccef854a6fb36d2d46b7dae0e4~tplv-k3u1fbpfcp-watermark.image?)
</html>

重新启动 container 项目,并打开 http://localhost:8080/
image.png
搞定~

2.6 集成 React 微前端

2.6.1 新建并改造 react-microfrontend-3

到目前为止,虽然我们使用 create-react-app 创建了三个项目,但是实际上我们还没有真正使用过 React。接下来,我们添加第三个微前端:react-microfrontend-3

npx create-react-app react-microfrontend-3

安装必要的依赖:

yarn add webpack webpack-cli webpack-server html-webpack-plugin webpack-dev-server -D

package.json 中增加 webpack script:

"scripts": {
    "webpack": "webpack serve",
    // ...
  },

我们需要一些规则才能将 JSX 转换为任何浏览器都可以理解的 JavaScript ES5。我们不必在前两个组件中执行此操作,因为它们都是纯 JavaScript。在 react-microfrontend-3 根目录下添加 webpack.config.js

const HtmlWebpackPlugin = require("html-webpack-plugin");
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
  mode: "development",
  devServer: {
    port: 8083,
  },
  module: {
    rules: [
      {
        test: /\.js?$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          presets: [
            "@babel/preset-env", // 将高级语法转译至 ES5
            "@babel/preset-react", // 编译react语法至 ES5
          ],
        },
      },
    ],
  },
  plugins: [
    new ModuleFederationPlugin({
      name: "microFrontEnd3",
      filename: "remoteEntry.js",
      exposes: {
        "./MicroFrontEnd3Index": "./src/index",
      },
    }),
    new HtmlWebpackPlugin({
      template: "./public/index.html",
    }),
  ],
};

改造一下 src 文件:

  1. 增加 bootstrap.js 文件:
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("react-microfrontend-3"));
  1. 重写 App.js
import React from "react";
const App = () => {
  return (
    <main>
      <h1>This is the react-microfrontend-3 app</h1>
    </main>
  );
};
export default App;
  1. 重写 index.js
import("./bootstrap");

记得也改造一下 public/index.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
      <h1>react-microfrontend-3</h1>
        <div id="react-microfrontend-3"></div>
    </body>
</html>

然后执行 yarn webpack,打开 http://localhost:8083/

image.png

2.6.2 引入到 container

跟上面两个项目引入的方式是一样的,在 container/src/bootstrap.js 中导入:

import "microFrontEnd1/MicroFrontEnd1Index";
import "microFrontEnd2/MicroFrontEnd2Index";
import "microFrontEnd3/MicroFrontEnd3Index";
console.log("Container!");

public/index.html 中增加一个 idreact-microfrontend-3div

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
  <div id="root"></div>
  <h1>** The second Micro Frontend **</h1>
  <div id="microFrontend2"></div>
  <div id="react-microfrontend-3"></div>
</body>
</html>

最后在 container/webpack.config.js 中引入:

const HtmlWebpackPlugin = require("html-webpack-plugin");
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
  mode: "development",
  devServer: {
    port: 8080,
  },
  plugins: [
    new ModuleFederationPlugin({
      name: "container",
      remotes: {
        microFrontEnd1: "microFrontEnd1@http://localhost:8081/remoteEntry.js",
        microFrontEnd2: "microFrontEnd2@http://localhost:8082/remoteEntry.js",
        microFrontEnd3: "microFrontEnd3@http://localhost:8083/remoteEntry.js",
      },
    }),
    new HtmlWebpackPlugin({
      template: "./public/index.html",
    }),
  ],
};

重启所有项目,你就可以在 http://localhost:8080/ 中看到我们引入了第三个 react 微前端了:
image.png
至此,我们便完成了一个基本的基于 webpack 模块联邦 的微前端项目了,code 请看这里 ~

2.7 集成 Vue 微前端

集成方式跟 react项目 几乎相同,这里就不赘述了,可看 源码 ~

最终效果图:
image.png

相关文章
|
30天前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
21天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
39 6
|
23天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
55 7
|
22天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
31 2
|
24天前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。
|
30天前
|
前端开发 API UED
拥抱微前端架构:构建灵活、高效的前端应用
【10月更文挑战第17天】微前端架构是一种将前端应用拆分为多个小型、独立、可复用的服务的方法,每个服务可以独立开发、部署和维护。本文介绍了微前端架构的核心概念、优势及实施步骤,并分享了业界应用案例和职业心得,帮助读者理解和应用这一新兴架构模式。
|
1月前
|
存储 监控 前端开发
掌握微前端架构:构建未来前端应用的基石
【10月更文挑战第12天】随着前端技术的发展,传统的单体应用架构已无法满足现代应用的需求。微前端架构通过将大型应用拆分为独立的小模块,提供了更高的灵活性、可维护性和快速迭代能力。本文介绍了微前端架构的概念、核心优势及实施步骤,并探讨了其在复杂应用中的应用及实战技巧。
|
1月前
|
缓存 前端开发 JavaScript
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
|
1月前
|
存储 监控 前端开发
掌握微前端架构:构建可扩展的前端应用
【10月更文挑战第6天】随着前端应用复杂性的增加,传统单体架构已难以满足需求。微前端架构通过将应用拆分为独立模块,提升了灵活性与可维护性。本文介绍微前端的概念、优势及实施步骤,包括定义边界、创建共享UI库、设置通信机制等,并探讨其在SPA扩展、大型项目模块化及遗留系统现代化中的应用。通过实战技巧如版本控制、配置管理和监控日志,帮助团队高效协作,保持应用灵活性。微前端架构为构建大型前端应用提供有效解决方案,适合希望提升项目可扩展性的开发者参考。
|
1月前
|
JSON 前端开发 JavaScript
前端模块打包器的深度解析
【10月更文挑战第13天】前端模块打包器的深度解析
下一篇
无影云桌面