当前位置: 首页 > article >正文

微前端之 Garfish.js 的基础使用教程和进阶配置

前言

在现代前端开发中,微前端架构逐渐成为一种流行的解决方案。它允许将大型应用拆分成多个小型独立的子应用,从而提高开发效率和可维护性。Garfish.js 是一个强大的微前端框架,可以帮助我们轻松实现这一架构。在本文中,通过一个简单易懂的教程,一步步了解如何使用 Garfish.js。

使用步骤

一、安装 Garfish

在开始使用 Garfish.js 之前,我们需要先安装它。在项目根目录下运行以下命令:

npm install @garfish/core

二、初始化 Garfish

安装完毕后,我们需要在项目中初始化 Garfish。首先,在你的主应用中创建一个 Garfish 配置文件 garfish.config.js

import Garfish from '@garfish/core';const config = {// 指定你的微前端应用的入口apps: [{name: 'myApp',entry: 'http://localhost:3001',activeWhen: '/myApp',},],
};Garfish.run(config);

在这个配置文件中,我们通过 apps 属性定义了微前端应用的名称、入口 URL 和激活条件。

三、创建子应用

接下来,我们需要创建一个子应用。在这里,我们假设子应用是一个简单的 React 应用。首先,在子应用目录下初始化一个新的 React 项目:

npx create-react-app myApp

然后在 myApp 项目中安装 Garfish.js:

npm install @garfish/core

四、配置子应用

在子应用中,我们需要配置 Garfish,使它能够与主应用进行通信。在 myApp/src/index.js 文件中添加以下代码:

import Garfish from '@garfish/core';
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';const config = {// 子应用的名称必须与主应用中的配置保持一致name: 'myApp',// 子应用挂载的节点domGetter: () => document.getElementById('root'),
};Garfish.registerApp(config);ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);

五、启动应用

现在,我们已经配置好了主应用和子应用。我们可以通过以下命令分别启动主应用和子应用:

# 启动主应用
npm start# 启动子应用
cd myApp
npm start

六、访问应用

启动应用后,我们可以通过浏览器访问主应用。输入主应用的 URL,例如 http://localhost:3000,然后访问子应用的路径,例如 http://localhost:3000/myApp。你将看到子应用成功嵌入到主应用中。

高级配置

在完成基础配置的基础上,Garfish.js 还提供了一些高级功能,以满足更加复杂的需求。下面我们来看看几个常见的高级配置选项。

1. 生命周期钩子

Garfish.js 提供了丰富的生命周期钩子,可以让你在微前端应用加载、挂载、卸载等过程中执行自定义逻辑。这些钩子包括 beforeLoadafterLoadbeforeMountafterMountbeforeUnmountafterUnmount

你可以在配置文件中添加这些钩子,例如:

const config = {apps: [{name: 'myApp',entry: 'http://localhost:3001',activeWhen: '/myApp',beforeLoad(appInfo) {console.log('Before loading', appInfo);},afterMount(appInfo) {console.log('After mounting', appInfo);},},],
};

2. 沙箱隔离

为了防止多个子应用之间的相互影响,Garfish.js 提供了沙箱隔离机制。默认情况下,每个子应用运行在独立的沙箱环境中。你可以通过配置沙箱选项来控制其行为:

const config = {apps: [{name: 'myApp',entry: 'http://localhost:3001',activeWhen: '/myApp',sandbox: {strictIsolation: true, // 开启严格隔离snapshot: true, // 启用快照},},],
};

3. 预加载

为了提高子应用的加载速度,Garfish.js 支持预加载功能。你可以在配置中启用预加载:

const config = {apps: [{name: 'myApp',entry: 'http://localhost:3001',activeWhen: '/myApp',// 预加载配置props: {prefetch: true,},},],
};

4. 自定义路由

Garfish.js 允许你自定义路由匹配规则,适应更加灵活的需求。你可以通过 activeWhen 配置项来实现:

const config = {apps: [{name: 'myApp',entry: 'http://localhost:3001',// 自定义路由匹配规则activeWhen: location => location.pathname.startsWith('/myApp'),},],
};

调试与优化

在开发过程中,调试和优化是不可或缺的环节。Garfish.js 提供了一些实用工具和建议,帮助开发者更好地调试和优化微前端应用。

1. 调试工具

Garfish.js 内置了日志功能,可以帮助你了解微前端应用的加载、挂载和卸载过程。你可以通过配置 logger 选项来启用日志:

const config = {apps: [{name: 'myApp',entry: 'http://localhost:3001',},],// 启用日志logger: {level: 'debug', // 可选值: 'info', 'warn', 'error', 'debug'},
};

2. 性能优化

为了优化微前端应用的性能,可以考虑以下几点:

  • 资源压缩:通过压缩 JavaScript、CSS 和图像资源,减少网络传输的大小。
  • 缓存:利用浏览器缓存机制,减少重复加载的资源。
  • 代码分割:将应用拆分成多个小模块,按需加载,减少初始加载时间。

总结

微前端架构的出现,为前端开发带来了全新的思路和解决方案。Garfish.js 提供了强大的微前端支持,使我们能够轻松实现大型应用的拆分和管理。

Garfish.js 是一个功能强大且灵活的微前端框架,无论是简单的项目还是复杂的企业级应用,它都能满足你的需求。通过本文的介绍,你应该已经掌握了 Garfish.js 的基础使用方法以及一些高级配置和优化技巧。

相关文章:

微前端之 Garfish.js 的基础使用教程和进阶配置

前言 在现代前端开发中&#xff0c;微前端架构逐渐成为一种流行的解决方案。它允许将大型应用拆分成多个小型独立的子应用&#xff0c;从而提高开发效率和可维护性。Garfish.js 是一个强大的微前端框架&#xff0c;可以帮助我们轻松实现这一架构。在本文中&#xff0c;通过一个…...

图像的特征

图像的特征主要包括以下几类&#xff1a; 1. 颜色特征&#xff1a; 直方图&#xff1a;描述图像中颜色的分布。 颜色矩&#xff1a;通过颜色的均值、方差等统计量表示颜色分布。 主色调&#xff1a;图像中占主导地位的颜色。 2. 纹理特征&#xff1a; 灰度共生矩阵&#xff0…...

Spring上下文工具类

文章目录 获取ip地址请求上下文相关Spring上下文获取Bean对象 获取ip地址 public class IpUtils {private IpUtils() {}/*** 获取请求ip地址** return {link String}*/public static String getIpAddress() {HttpServletRequest request RequestContextHolderUtils.getReques…...

JSONUtil InvocationTargetException: null

使用JSONUtil时候报错&#xff0c;一般这时候你检查下自己代码里是不是重写了get或者set InvocationTargetException 是 Java 中的一个异常&#xff0c;通常在使用反射&#xff08;Reflection&#xff09;或动态代理&#xff08;Dynamic Proxy&#xff09;时抛出。它表示在调用…...

高压为什么cover不住低压的hold问题

常规下我们认为hold问题常发生在高压下&#xff0c;但很多情况下高压的hold无法cover低压的hold hold slack (tlaunch -tcapture) (tcqtcomb) -thold -tuncertainty (tlaunch -tcapture):代表时钟skew (tcqtcomb)&#xff1a;代表data path的长度 thold&#xff1a;代表查表…...

【算法学习之路】8.栈和队列

栈和队列 前言一.简介二.题目12 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也写了几篇&#xff0c;题单正在更新&#xff0c;其他的也会陆陆续续的更新&#xff0c;希望大家点…...

OpenMCU(三):STM32F103 FreeRTOS移植

概述 本文主要描述了STM32F103移植FreeRTOS的简要步骤。移植描述过程中&#xff0c;忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_RTOS这个工程&#xff0c;该工程已经下载放好了移植STM32F103 FreeRTOS的所有文件 OpenMCU_RTOS工程的愿景…...

大数据 spark hive 总结

Apache Spark 简介 是一个开源的统一分析引擎&#xff0c;专为大规模数据处理而设计。它提供了高级API&#xff0c;支持Java、Scala、Python和R语言&#xff0c;并且包含了一个优化过的执行引擎&#xff0c;该引擎支持循环计算&#xff08;如机器学习算法&#xff09;和交互式…...

小程序开发总结

今年第一次帮别人做小程序。 从开始动手到完成上线&#xff0c;一共耗时两天。AI 让写代码变得简单、高效。 不过&#xff0c;小程序和 Flutter 等大厂开发框架差距实在太大&#xff0c;导致我一开始根本找不到感觉。 第一&#xff0c;IDE 不好用&#xff0c;各种功能杂糅在…...

QLoggingCategory类使用

QLoggingCategory类使用 QLoggingCategory的概述 QLoggingCategory是Qt的日志策略类&#xff1b;可以通过声明不同的日志策略对象来输出不同的日志信息。打印信息类型如下&#xff1a;宏 Q_DECLARE_LOGGING_CATEGORY(name) 定义一个返回QLoggingCategory对象函数&#xff0c;…...

GPU加速生信分析-宏基因组MAG去污染

Deepurify利用多模态深度语言模型来过滤污染的基因组&#xff0c;从而提高了宏基因组组装基因组&#xff08;MAGs&#xff09;的质量&#xff0c;并且可以利用GPU加速。 宏基因组组装的基因组 &#xff08;MAG&#xff09; 为使用宏基因组测序数据探索微生物暗物质提供了有价值…...

数据结构(蓝桥杯常考点)

数据结构 前言&#xff1a;这个是针对于蓝桥杯竞赛常考的数据结构内容&#xff0c;基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中&#xff0c;时间复杂度不能超过10的7次方&#xff08;1秒&#xff09;到10的8次方&#xff08;2秒&#xff09; 空间限制&#x…...

从0到1入门Linux

一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…...

灰色地带规避:知识产权校验API的商标库模糊匹配算法

在反向海淘或其他电商业务场景中&#xff0c;为了规避知识产权方面的灰色地带&#xff0c;开发知识产权校验 API 并运用商标库模糊匹配算法是很有必要的。以下将详细介绍商标库模糊匹配算法的设计与实现&#xff1a; 算法设计思路 商标库模糊匹配算法的核心目标是在给定一个待匹…...

React:类组件(中)

dangerouslySetInnerHTML React写进{}内的东西&#xff0c;不允许被当作代码块解析&#xff0c;是为了防止xss攻击和代码注入 XSS&#xff08;跨站脚本攻击&#xff0c;Cross-Site Scripting&#xff09; 是一种常见的安全漏洞&#xff0c;攻击者通过注入恶意脚本到网页中&…...

第六次CCF-CSP认证(含C++源码)

第六次CCF-CSP认证 数位之和&#xff08;easy&#xff09;思路及AC代码遇到的问题 开心消消乐&#xff08;easy&#xff09;思路及AC代码 画图&#xff08;mid&#xff09;思路及AC代码 数位之和&#xff08;easy&#xff09; 题目链接 思路及AC代码 既然题目要求我们输出各位…...

SpringBoot 如何调用 WebService 接口

前言 调用WebService接口的方式有很多&#xff0c;今天记录一下&#xff0c;使用 Spring Web Services 调用 SOAP WebService接口 一.导入依赖 <!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId…...

算法 之 树形dp 树的中心、重心

文章目录 重心实践题目小红的陡峭值 在树的算法中&#xff0c;求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义&#xff1a;重心是树中的一个节点&#xff0c;如果将这个点删除后&#xff0c;剩余各个连通块中点数的最大值最小&#xff0c;那么这个节点…...

Docker 配置镜像源

》》Daemon {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me"] }》》》然后在重新 docker systemctl restart docker...

Linux 离线部署Ollama和DeepSeek-r1模型

都在复制粘贴联网状态下linux部署deepseek&#xff0c;离线状态下需要下载Ollama和DeepSeek模型&#xff0c;然后将下载包上传到linux中。 1、下载Ollama https://github.com/ollama/ollama/releases 注意&#xff1a;如果CentOS7建议安装V0.5.11版本&#xff0c;V0.5.13需要…...

SQLAlchemy系列教程:如何执行原生SQL

Python中的数据库交互提供了高级API。但是&#xff0c;有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射&#xff08;ORM&#xff09;功能而闻名&#xff…...

RuleOS:区块链开发的“新引擎”,点燃Web3创新之火

RuleOS&#xff1a;区块链开发的“新引擎”&#xff0c;点燃Web3创新之火 在区块链技术的浪潮中&#xff0c;RuleOS宛如一台强劲的“新引擎”&#xff0c;为个人和企业开发去中心化应用&#xff08;DApp&#xff09;注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…...

【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件

【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件 文章目录 [TOC](文章目录) 前言一、方法一&#xff1a;使用固件烧录工具1. 安装CH340驱动2. 打开FLASH_DOWNLOAD文件3. 选择芯片类型和烧录方式4. 选择烧录文件5. 参数配置 二、方法二&#xff1a;VSCODE导入工程1.…...

设计模式文章汇总-Golang语言实现

Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 Golang学习笔记_34——组合模式 Gola…...

显式 GC 的使用:留与去,如何选择?

目录 一、什么是显式 GC&#xff1f; &#xff08;一&#xff09; 垃圾回收的基本原理 &#xff08;二&#xff09;显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 &#xff08;三&#xff09;显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…...

SpringMVC概述以及入门案例

目录 SpringMVC概述 为什么需要Spring MVC&#xff1f; SpringMVC入门 工作流程分析 SpringMVC概述 SpringMVC技术与Servlet技术功能等同&#xff0c;均属于Web层开发技术。SpringMVC是一种基于java实现MVC模型的轻量级Web框架。 为什么需要Spring MVC&#xff1f; 在传统J…...

5. 前后端实现文件上传与解析

1. 说明 在实际开发中&#xff0c;比较常见的一个功能是需要在前端页面中选择系统中的某个文件上传到服务器中进行解析&#xff0c;解析后的文件内容可以用来在服务器中当作参数&#xff0c;或者传递给其它组件使用&#xff0c;或者需要存储到数据库中。所以本文就提供一种方式…...

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐ 示例 1&#xff1a; 输入&#xff1a;original [1,2,3,4], bounds [[1,2],[2,3],[3,4],[4,5]] 输出&#xff1a;2 解释&#xff1a; 可能的数组为&#xff1a; [1, 2, 3, 4] [2, 3, 4, 5] 示例 2&#xff1a; 输入&…...

javaEE初阶————多线程进阶(2)

今天来继续带大家学习多线程进阶部分啦&#xff0c;今天是最后一期啦&#xff0c;下期带大家做一些多线程的题&#xff0c;我们就可以开始下一个环节啦&#xff1b; 1&#xff0c;JUC&#xff08;java.util.concurrent&#xff09;的常见类 1&#xff09;Callable 接口 我们之…...

Java 虚拟机优化指南:CMS垃圾回收器参数调优与性能监控工具详解

Java 虚拟机优化指南&#xff1a;CMS垃圾回收器参数调优与性能监控工具详解 引言 在高并发、大流量的企业级Java应用中&#xff0c;JVM参数的调优对系统性能至关重要。合理的JVM配置不仅能提高应用响应速度&#xff0c;还能减少垃圾回收造成的停顿时间&#xff0c;提升用户体…...