在这篇博客中,我们将探讨如何使用Single-SPA从零开始搭建一个React微前端项目,该项目将包含三个不同的子应用。我们将使用Webpack包管理工具和yarn来管理依赖关系,并使用Single-SPA技术来集成和协调不同的子应用。

什么是微前端?

在传统的前端开发中,通常使用单一的前端框架来构建整个应用程序。这意味着我们必须在同一个代码库中维护整个应用程序的代码,并且所有的功能都必须一起部署。然而,随着应用程序变得越来越复杂,这种方法变得越来越难以维护。

微前端是一种新兴的前端开发架构,它通过将应用程序拆分为多个独立的子应用来解决这个问题。每个子应用都可以使用不同的前端框架或技术栈来开发,这些子应用可以单独构建、部署和维护。最终,这些子应用将组合在一起,以创建一个完整的应用程序。

Single-SPA简介

Single-SPA是一种用于构建微前端应用程序的JavaScript框架。它允许你将多个独立的子应用程序集成到一个统一的应用程序中。每个子应用程序可以使用不同的框架或技术栈来开发,并且可以独立构建、部署和维护。

Single-SPA提供了一个应用程序生命周期钩子,使得在不同的子应用之间切换变得容易。它还提供了一些常用的功能,例如路由和事件总线,以帮助你构建更加复杂的微前端应用程序。

准备工作

在开始之前,请确保您已经安装了以下软件:

  • Node.js

  • npm 或 yarn

  • webpack

此外,还需要创建一个新的目录来存储我们的项目。打开终端并执行以下命令

mkdir react-microfrontend
cd react-microfrontend

现在我们已经准备好开始构建React微前端项目了!

步骤一:创建主应用程序

第一步是创建一个主应用程序,它将作为我们微前端应用程序的入口点。使用Create React App来创建我们的主应用程序。打开终端并执行以下命令:

npx create-react-app main-app
cd main-app

现在我们已经创建了一个名为main-app的主应用程序。可以启动开发服务器并查看它是否可以正常工作。在终端中输入以下命令启动开发服务器:

yarn start

在浏览器中打开http://localhost:3000,你应该能够看到一个React应用程序的欢迎页面。

接下来需要将Single-SPA集成到我们的主应用程序中。为此,需要安装Single-SPA和相关依赖项。在终端中执行以下命令:

yarn add single-spa single-spa-react react-router-dom

现在我们已经安装了Single-SPA React包。接下来,需要将React应用程序转换为Single-SPA应用程序。创建一个名为“root-config”的新文件夹,其中包含Single-SPA配置文件。

mkdir root-config
cd root-config
touch index.js

在“index.js”文件中,需要引入Single-SPA并将我们的React应用程序转换为Single-SPA应用程序。这是一个例子:

import React from 'react';
import ReactDOM from 'react-dom';
import singleSpaReact from 'single-spa-react';
import App from '../src/App';const reactLifecycles = singleSpaReact({React,ReactDOM,rootComponent: App,domElementGetter: () => document.getElementById('root'),
});export const bootstrap = [reactLifecycles.bootstrap,
];export const mount = [reactLifecycles.mount,
];export const unmount = [reactLifecycles.unmount,
];

上述代码引入了Single-SPA并将我们的React应用程序转换为Single-SPA应用程序。还为我们的应用程序定义了生命周期方法:bootstrap,mount和unmount。

步骤二:创建子应用程序

接下来,我们将创建三个子应用程序,每个子应用程序都将使用不同的React组件。使用Create React App来创建我们的子应用程序。在终端中执行以下命令:

npx create-react-app subapp1
npx create-react-app subapp2
npx create-react-app subapp3

现在我们已经创建了三个名为subapp1、subapp2和subapp3的子应用程序。

分别进入这些目录并启动开发服务器:

cd subapp1
yarn start
cd subapp2
yarn start
cd subapp3
yarn start

在浏览器中打开http://localhost:3001,http://localhost:3002和http://localhost:3003,你应该能够看到三个React应用程序的欢迎页面。

现在需要将Single-SPA集成到我们的子应用程序中。为此,我们将安装Single-SPA和相关依赖项。在终端中依次进入每个子应用程序目录,并执行以下命令:

yarn add single-spa single-spa-react

在每个子应用程序的根目录中,创建一个名为“single-spa-config”的新文件夹,并在其中创建一个名为“index.js”的新文件。

mkdir single-spa-config
cd single-spa-config
touch index.js

在“index.js”文件中,我们需要导出子应用程序的生命周期方法。以下是一个例子:

import React from 'react';
import ReactDOM from 'react-dom';
import singleSpaReact from 'single-spa-react';
import App from '../src/App';const reactLifecycles = singleSpaReact({React,ReactDOM,rootComponent: App,
});export const bootstrap = [reactLifecycles.bootstrap,
];
export const mount = [
reactLifecycles.mount,
];export const unmount = [
reactLifecycles.unmount,
];

这将导出子应用程序的生命周期方法,我们稍后将在主配置文件中使用它们。

重复以上步骤,将“single-spa-config”文件夹添加到每个子应用程序中。

步骤三:配置Webpack

接下来,我们需要配置Webpack来使我们的项目可以处理Single-SPA应用程序。

在项目根目录中创建一个名为“webpack.config.js”的新文件。在该文件中,需要配置Webpack来使用Single-SPA并处理子应用程序。

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: path.resolve(__dirname, 'root-config', 'index.js'),output: {filename: 'root-config.js',path: path.resolve(__dirname, 'dist'),},module: {rules: [{test: /\.js$/,exclude: /node_modules/,loader: 'babel-loader',},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: path.resolve(__dirname, 'public', 'index.html'),}),],devServer: {historyApiFallback: true,},devtool: 'source-map',externals: [],resolve: {modules: [__dirname, 'node_modules'],alias: {'react': path.resolve(__dirname, 'node_modules', 'react'),'react-dom': path.resolve(__dirname, 'node_modules', 'react-dom'),},extensions: ['.js', '.jsx', '.scss'],},
};

上述代码中,我们定义了Webpack配置文件。我们定义了入口文件和输出路径,配置了Babel处理JavaScript文件,定义了一些插件和devServer选项。我们还配置了externals和resolve属性,以便我们的应用程序可以在运行时动态加载。

第四步:配置主应用程序

现在,我们需要在主应用程序中使用所有子应用程序的Single-SPA。打开“index.js”文件并添加以下代码:

import { registerApplication, start } from 'single-spa';registerApplication('subapp1',() => import('./subapp1/single-spa-config'),() => location.pathname.startsWith('/subapp1')
);registerApplication('subapp2',() => import('./subapp2/single-spa-config'),() => location.pathname.startsWith('/subapp2')
);registerApplication('subapp3',() => import('./subapp3/single-spa-config'),() => location.pathname.startsWith('/subapp3')
);start();

上述代码中,我们使用registerApplication方法注册了所有子应用程序,并定义了它们的URL路径。我们还调用了start方法以启动Single-SPA应用程序。

第五步:运行应用程序

现在,我们已经准备好启动我们的应用程序。在终端中输入以下命令:

yarn start

这将启动Webpack Dev Server并在浏览器中打开应用程序。

现在,你可以访问http://localhost:3000并浏览React微前端应用程序!

结论

在本博客中,我们介绍了如何使用Single-SPA从零开始搭建拥有三个不同子应用的React微前端项目。我们使用Webpack包管理工具,Yarn和Single-SPA技术来构建整个应用程序。我们还讨论了如何在主应用程序中注册子应用程序,并使用Single-SPA方法来启动整个应用程序。希望这篇博客对你有所帮助,感谢阅读!

使用 Single-SPA 从零开始搭建 React 微前端项目相关推荐

  1. 基于qiankun搭建ng-alain15微前端项目示例实践

    基础环境 实践日期:2023-03-04 ng versionAngular CLI: 15.2.1 Node: 18.14.2 Package Manager: npm 9.5.0 OS: win3 ...

  2. 基于qiankun搭建ng-alain15微前端项目入门实践

    基础环境 实践日期:2023-02-22 ng versionAngular CLI: 15.1.6 Node: 18.14.2 Package Manager: npm 9.5.0 OS: win3 ...

  3. 如何利用qiankun快速搭建一个微前端项目

    前言 小伙伴们大家好.前一篇文章跟大家分享了一些关于微前端的知识点,包括什么是微前端,为什么要用微前端以及如何实现一个微前端,在文章的最后我们还提到了能够实现微前端的两个库:single-spa和qi ...

  4. 从零搭建飞冰微前端项目《第一篇:优势分析》

    框架选择: 基于React的飞冰渐进式研发框架(阿里开源,也叫Ice/Icejs) 微前端使用icestark微前端解决方案 UI组件库选择fusifon(企业级的中后台设计系统解决方案) 其他:ah ...

  5. 从零搭建飞冰微前端项目《第三篇:搭建微应用》❤️

    前言: 把微应用接入主应用,其实很简单,但是要还要考虑数据通信等等问题 路途有点远,也得慢慢走! 微应用把React和Vue都用上吧,反正解耦了 创建微应用就不使用AppWorks了,使用官网模板,再 ...

  6. 从零搭建飞冰微前端项目《第二篇:搭建主应用》

    前提: VsCode里有AppWorks 规范: 主应用又称框架应用或基座应用,一个系统只有一个主应用.主应用应该保持职责明确,一个设计良好的主应用只做两件事情: 系统整体 Layout 的设计 所有 ...

  7. 从零搭建飞冰微前端项目《第四篇:权限管理》

  8. vue简易微前端项目搭建(一):项目背景及简介

    github传送门: 1.h5主项目 2.项目脚手架 3.子项目模板 系列文章传送门: vue简易微前端项目搭建(一):项目背景及简介 vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建 vu ...

  9. vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建

    github传送门: 1.h5主项目 2.项目脚手架 3.子项目模板 系列文章传送门: vue简易微前端项目搭建(一):项目背景及简介 vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建 vu ...

最新文章

  1. Android--实现自制录音/播放录音程序
  2. 记一种验证日期格式的正则表达式
  3. php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)
  4. sql如何实现明细账_SQL 如何实现动态的行列转置
  5. 指甲之指甲长期没有甲半月弧(二)
  6. 密钥协商(密钥交换)机制的讲解
  7. Linux cpu亲和力
  8. word删除分节符后之前的格式乱了_办公室高级技能之Word邮件合并拆分
  9. 关于运维架构技术的理想化形态设想
  10. 前端改变div排序_前端面试经常问到的问题
  11. javascript 网页自动跳转
  12. batchplot插件用法_batchplot插件怎么安装 batchplot插件安装教程
  13. 解决iOS 12.4 (16G77), which may not be supported by this version of Xcode
  14. 皮克定理和任意多边形的面积公式
  15. 做微信公众号淘宝客返利系统必须要知道3件事儿
  16. 每日excel学习之查找替换和定位
  17. C# Winform右下角弹窗方式
  18. 搜索及代码在GitHub上查重小技巧
  19. YYC松鼠短视频系统完整版的文件结构目录介绍以及自定义目录详解
  20. 3D资产大掌柜—Connecter

热门文章

  1. 卷三十七 汉纪二十九
  2. [substence designer]最近做的几个PBR材质
  3. android上传二进制流到服务器,android – 通过ADB shell传输二进制数据(即使...
  4. ecshop验证码不显示
  5. IP 核之RAM实验
  6. 打印时提示计算机的内存不足,电脑中使用惠普P4510打印机打印时出现内存不足怎么处理...
  7. 致敬2202年,这些优秀的裁缝们
  8. 某程序员薪资税前上百万却后悔没创业,网友:矫情!
  9. 数学笔记29——反常积分和瑕积分
  10. android的访问存储权限,使用SAF(存储访问框架)的Android SD卡写权限