【微前端】手把手教你从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

相关文章
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
406 7
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
378 6
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
309 2
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
442 1
|
前端开发
前端浮动模块
前端浮动模块
158 0
前端浮动模块
|
JSON 前端开发 JavaScript
前端模块打包器的深度解析
【10月更文挑战第13天】前端模块打包器的深度解析
开发指南047-前端模块版本
平台前端框架内置了一个文件version.vue
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1499 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
866 0
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架