搜索
首页web前端js教程使用 Module Federation Vite 的 Monorepo 和微前端

Monorepo and Micro-Frontends Using Module Federation   Vite

✨简介✨:

莫诺雷波

monorepo 是管理多个相关但独立项目的单个存储库。与单独的存储库相比,它通过实现代码重用、简化依赖关系并促进更好的团队协作来简化开发。

微前端

前端的 Web 应用程序架构,可将其分解为更小的、可单独部署的独立单元。微前端可以独立于其他代码库创建和部署,这意味着它们具有更好的灵活性和可扩展性。

模块联盟和Vite

模块联合:这是 Webpack 中非常强大的功能,可以从远程位置动态加载代码。

Vite:这是一种更现代的前端构建工具,它允许快速开发服务器启动和即时热模块替换,对现代 JavaScript 功能有很好的支持,并通过插件系统扩展其功能.

这些工具可以解决的问题:

  • 扩展团队
  • 管理依赖关系
  • 提高开发速度

通过结合这些模式和工具,我们可以构建可扩展、可维护且高性能的前端应用程序,以满足现代 Web 开发的需求。

结合 Monorepos、微前端、模块联盟和 Vite ??:

影响

通过结合这些技术,您可以创建一个强大而灵活的架构,用于构建大规模、复杂的 Web 应用程序。以下是主要影响的细分:

  • 增强的可扩展性:在单一存储库中独立部署和更新微前端。
  • 改善开发者体验:使用 Vite 和简化的工作流程加快开发速度。
  • 优化性能: 使用模块联合按需加载代码可减少初始加载时间。
  • 更好的可维护性:模块化微前端改进代码组织并减少耦合。

??这个理论已经够多了,让我们看看一些行动吧! ??

怎么做?

1:设置 Monorepo

选择单一存储库管理工具,例如 LernaNx。 (让我们为这个演示项目选择Nx

  • 让我们创建一个文件夹并在其中初始化 Nx 工作区。
mkdir my-monorepo
cd my-monorepo

2:安装Nx CLI:

  • 全局安装 Nx CLI 到您的系统中
npm add --global nx@latest 

  • 初始化Nx工作区
npx create-nx-workspace@latest

  • 使用 Nx CLI 在您的工作区中生成新的应用程序和库
nx g @nx/next:application host-app
.
.
.
nx g @nx/react:application my-remote-app
.
.
.
nx g @nx/react:library my-utils


3:配置Vite并实现模块联盟:

  • 在每个微前端的 vite.config.js 中安装 @originjs/vite-plugin-federation 插件。
npm i @originjs/vite-plugin-federation -D

  • 创建一个 vite.config.js (如果不是由 Nx 创建的)并配置它。
  • 实现模块联合包。

主机-应用程序Vite配置:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [
     react(),
     federation({
      name: 'host-app',
      remoteApp: {},  // add Urls of your remote apps here
     shared: {
        react: {
          singleton: true,
          requiredVersion: '18.2.0',
        },
        'react-dom': {
          singleton: true,
          requiredVersion: '18.2.0',
        },
      },
    }),
  ],
});

远程应用程序 Vite 配置:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [
     react(),
     name: 'my-remote-app', // unique app name for your remote module
     filename: 'remoteEntry.js',
     exposes: {}, // add the path of any components you want to expose to the host app
     shared: {
       react: {
         singleton: true,
         requiredVersion: '18.2.0',
       },
       'react-dom': {
         singleton: true,
         requiredVersion: '18.2.0',
       },
     },
    }),
  ],
});

您的项目结构应如下所示

my-monorepo/
├── apps/
│   ├── host-app/
│   │   ├── package.json
│   │   ├── vite.config.js
│   │   ├── src/
│   │   └── ...
│   ├── my-utils/
│   │   ├── package.json
│   │   ├── src/
│   │   └── ...
│   └── my-remote-app/
│       ├── package.json
│       ├── vite.config.js
│       ├── src/
│       └── ...
└── nx.json

?恭喜,您的应用程序现已配置完毕。 ?
现在,继续创建一个组件并将其公开给主机应用程序。

如何向主机添加远程组件?

假设您已将组件公开为“AppComponent”,并且您的远程名称为“remoteApp”

const RemoteComponent = React.lazy(() => import('remoteApp/AppComponent'));

<suspense fallback="{<">Loading....>}>
  <remotecomponent></remotecomponent>
</suspense>

*注意:* 确保将远程 URL 添加到主机的 vite.config.js 文件中。

现实世界场景??:

大型电商平台:同一个团队可以独立处理产品页面、结帐流程和用户帐户。
企业应用:功能可以由共享平台内的不同部门管理。
不同的团队可以创建和维护单独的小部件或仪表板。

?在这里查看我的演示项目代码??:Monorepo 项目

结论

Monorepos、微前端、模块联盟和 Vite,利用上述所有技术的优势,可以帮助组织构建可扩展、可维护和高性能的 Web 应用程序,满足现代开发和业务需求。

其他资源:

Nx 文档
Vite文档
Webpack 模块联盟
微前端架构

如果您在为您的项目实施此设置时有疑问或需要帮助,请随时与我们联系。让我们构建一些令人惊奇的东西! ?

以上是使用 Module Federation Vite 的 Monorepo 和微前端的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript数据类型:浏览器和nodejs之间是否有区别?JavaScript数据类型:浏览器和nodejs之间是否有区别?May 14, 2025 am 12:15 AM

JavaScript核心数据类型在浏览器和Node.js中一致,但处理方式和额外类型有所不同。1)全局对象在浏览器中为window,在Node.js中为global。2)Node.js独有Buffer对象,用于处理二进制数据。3)性能和时间处理在两者间也有差异,需根据环境调整代码。

JavaScript评论:使用//和 / * * / * / * /JavaScript评论:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具