服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - React - 我来教你如何使用 Vite 的 React 微前端

我来教你如何使用 Vite 的 React 微前端

2024-03-06 13:14前端新世界 React

通过利用Vite的快速构建和模块联合的动态代码加载功能,我们可以以模块化和可维护的方式高效地开发和扩展web应用程序。这种方法使多个团队能够独立处理应用程序的不同部分,从而提高前端开发的灵活性和敏捷性。

什么是微前端?

微前端是web应用程序的一种架构方法,程序的前端代码被划分为更小的、独立开发的和可部署的单元,称为微前端。

这种方法允许不同的团队在前端的不同部分工作,同时通过隔离层保持集成,提高了开发速度、可扩展性和灵活性。这是一种管理复杂性和促进前端开发自主性的方法。

模块联合

模块联合是一项关键技术,使JavaScript应用程序能够在共享依赖项的同时从另一个应用程序动态加载代码。

当使用联合模块的应用程序缺少所需的依赖项时,Webpack(底层技术)会自动从联合构建源获取缺少的依赖项。从而允许跨多个微前端高效共享和使用公共库。

为什么选择Vite?

虽然模块联合最初是在Webpack中引入的,但JavaScript开发的格局也由此发生了改变。Vite通过提供闪电般的构建时间而成为游戏规则的改变者。Vite和模块联合的结合使用可以快速有效地开发微前端,发挥巨大作用。

使用Vite + React创建微前端

创建微前端通常涉及两个主要部分:

  1. 主机应用程序:用户与之交互的主要应用程序。充当微前端的容器。
  2. 远程应用程序:即微前端本身,充当主机应用程序的构建块。

在了解了我们将要使用的技术之后,让我们实际实现试试。

设置主机应用

要使用Vite和React创建主机应用程序,先运行以下命令:

# Using npm 6.x
npm create vite@latest host-app --template react

# Using npm 7+, add an extra double-dash:
npm create vite@latest host-app -- --template react

设置远程应用

对远程应用程序,执行以下命令:

npm create vite@latest todo-components -- --template react

这将创建两个文件夹,host-app和todo-components。接下来安装依赖项:

npm install

在远程应用中创建组件

在todo-components应用中,创建以下组件:

// components/List.jsx
import React from "react";

const List = (props) => {
  const { items } = props;
  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
};

export default List;
// components/Input.jsx
import React from "react";

const Input = (props) => {
  const { value, onChange, onSubmit } = props;
  return (
    <form
      onSubmit={(e) => {
        e.preventDefault();
        onSubmit(e);
      }}
    >
      <div className="flex-row">
        <input
          type="text"
          value={value}
          onChange={(e) => onChange(e.target.value)}
        />
        <button type="submit">Add</button>
      </div>
    </form>
  );
};

export default Input;

组件准备就绪后,对App.jsx文件进行以下更改:

// App.jsx
import { useState } from "react";
import reactLogo from "./assets/react.svg";
import viteLogo from "/vite.svg";
import "./App.css";
import Input from "./components/Input";
import List from "./components/List";

function App() {
  const [count, setCount] = useState(0);

  return (
    <>
      <Input value={count} onChange={setCount} onSubmit={console.log} />
      <List items={["Learn React", "Learn Vite", "Make an awesome app"]} />
    </>
  );
}

export default App;

预览远程应用

要预览组件,请在todo-components应用中运行以下命令:

npm run dev

此时输出如下:

添加模块联合到远程应用

现在,让我们将模块联合添加到todo-components应用。首先,安装必要的依赖项:

npm install @originjs/vite-plugin-federation --save-dev

接着,在vite.config.js文件中配置模块联合:

// vite.config.js in todo-components
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import federation from "@originjs/vite-plugin-federation";

export default defineConfig({
  plugins: [
    react(),
    federation({
      name: "todo-components",
      filename: "remoteEntry.js",
      exposes: {
        "./List": "./src/components/List.jsx",
        "./Input": "./src/components/Input.jsx",
      },
      shared: ["react"],
    }),
  ],
  build: {
    modulePreload: false,
    target: "esnext",
    minify: false,
    cssCodeSplit: false,
  },
});

在此配置中:

  • name:指定远程应用的名称。
  • filename:设置模块联合生成文件的名称。
  • exposes:列出要从远程应用公开的组件。
  • shared:声明共享依赖项,例如React,以优化捆绑包大小。

现在,构建远程应用:

npm run build

这会在todo-components应用程序中生成dist文件夹,其中包含remoteEntry.js文件。

为远程应用提供服务

在本地为远程应用提供服务:

npm run preview

这意味着在端口4173上为远程应用提供服务。

添加模块联合到主机应用

要在主机应用中使用远程应用组件,需要在主机应用的vite.config.js文件中设置模块联合:

// vite.config.js in host-app
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import federation from "@originjs/vite-plugin-federation";

export default defineConfig({
  plugins: [
    react(),
    federation({
      name: "host-app",
      remotes: {
        todo_components: "http://localhost:4173/assets/remoteEntry.js",
      },
      shared: ["react"],
    }),
  ],
  build: {
    modulePreload: false,
    target: "esnext",

    minify: false,
    cssCodeSplit: false,
  },
});

在此配置中:

  • name:指定主机应用的名称。
  • remotes:列出主机应用要使用的远程应用。在本例中,我们有远程应用、todo_components、以及提供remoteEntry.js文件的URL。
  • shared:声明共享的依赖项,例如React,以优化捆绑包大小。

在主机应用中使用远程组件

现在,我们可以在主机应用的App.jsx中导入和使用远程应用组件了:

// App.jsx in host-app
import { useState } from "react";
import List from "todo_components/List";
import Input from "todo_components/Input";

function App() {
  const [newTodo, setNewTodo] = useState("");
  const [todos, setTodos] = useState([]);
  const onSubmit = () => {
    setTodos((prev) => [...prev, newTodo]);
    setNewTodo("");
  };

  return (
    <>
      <Input value={newTodo} onChange={setNewTodo} onSubmit={onSubmit} />
      <List items={todos} />
    </>
  );
}

export default App;

这里我们使用指定的远程名称todo_components从远程应用导入组件。

为主机应用提供服务

若要在本地为主机应用提供服务,运行:

npm run dev

现在,远程应用程序中的组件就可以在主机应用程序中无缝使用了,赞。

结论

在本文中,我们探讨了微前端的概念,演示了如何使用Vite和React创建微前端架构,以及如何通过模块联合进行增强。

通过利用Vite的快速构建和模块联合的动态代码加载功能,我们可以以模块化和可维护的方式高效地开发和扩展web应用程序。这种方法使多个团队能够独立处理应用程序的不同部分,从而提高前端开发的灵活性和敏捷性。

原文地址:https://mp.weixin.qq.com/s/EeLD51oDXYfEaIRnUfOCJw

延伸 · 阅读

精彩推荐
  • React都 2022 年了,手动搭建 React 开发环境很难吗?

    都 2022 年了,手动搭建 React 开发环境很难吗?

    作为一名前端工程师,总是用一些脚手架来快速搭建新项目的基本结构,因此今天尝试着一步步搭建一个 React 的项目环境,看看需要处理哪些问题,查漏补...

    DYBOY3702022-04-19
  • ReactReact事件机制源码解析

    React事件机制源码解析

    这篇文章主要介绍了React事件机制源码解析的相关资料,帮助大家更好的理解和学习使用React框架,感兴趣的朋友可以了解下...

    ZHANGYU10882022-02-25
  • ReactReact Native 脚手架的基本使用详解

    React Native 脚手架的基本使用详解

    这篇文章主要介绍了React Native 脚手架的基本使用详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    愚公搬代码11492022-03-08
  • Reactreact-media-recorder轻松实现一个录音、录像、录屏工具库

    react-media-recorder轻松实现一个录音、录像、录屏工具库

    最近项目遇到一个要在网页上录音的需求,在一波搜索后,发现了 react-media-recorder[1] 这个库。今天就跟大家一起研究一下这个库的源码吧,从 0 到 1 来实现...

    写代码的海怪7402022-03-07
  • ReactReact+Koa实现文件上传的示例

    React+Koa实现文件上传的示例

    这篇文章主要介绍了React+Koa实现文件上传的示例,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下...

    孤雨随风zz4482022-02-23
  • React都 2024 年了,该如何搭建新的 React 项目?

    都 2024 年了,该如何搭建新的 React 项目?

    如果正在寻找一个基于 React 的具有多种渲染技术(和基础架构)的框架,可以考虑使用 Next.js。Next.js 是一个流行的 React 框架,提供了服务端渲染(SSR)和...

    51CTO4972024-01-25
  • ReactReact hooks的优缺点详解

    React hooks的优缺点详解

    这篇文章主要介绍了React hooks的优缺点详解,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下...

    ranyonsue10832022-03-10
  • ReactReact 三大属性之state的使用详解

    React 三大属性之state的使用详解

    这篇文章主要介绍了React 三大属性之state的使用详解,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下...

    xiaoznz3962022-03-02