字节微前端框架Garfish

Garfish 是字节跳动开源的微前端框架,旨在应对现代 Web 应用在前端生态繁荣与应用日益复杂化背景下的挑战。本文将介绍如何使用 Garfish,提供代码示例,并与另一流行的微前端框架 Qiankun 进行对比分析。
在这里插入图片描述

安装 Garfish

首先,安装 Garfish 核心库:

npm install @garfish/core --save

创建主应用

创建主应用的入口文件,如 index.jsmain.js,并初始化 Garfish:

import Garfish from '@garfish/core';const garfish = new Garfish({router: {historyType: 'hash',publicPath: '/',routes: [{path: '/app1',microApp: {name: 'app1',entry: '//localhost:8081',container: '#root',activeRule: (location) => location.pathname === '/app1',},},{path: '/app2',microApp: {name: 'app2',entry: '//localhost:8082',container: '#root',activeRule: (location) => location.pathname === '/app2',},},],},
});garfish.start();

开发与构建微应用

每个微应用都应有独立的构建流程,以下是基于 localhost:8081 运行的 Vue 应用示例:

Vue 示例

在微应用中,暴露必要的 API 供 Garfish 调用:

// app1/main.js
import { bootstrap, mount, unmount } from '@garfish/runtime-vue';
import App from './App.vue';bootstrap(App).then(mount(App)).catch(console.error);window.unmount = unmount;

使用 Webpack 或 Rollup 等工具来打包微应用。例如,使用 Webpack:

// webpack.config.js
module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',publicPath: '/',},// 其他配置...
};

打包完成后,将微应用部署到相应的服务器,如 localhost:8081

Garfish 与 Qiankun 的对比

技术栈支持

  • Garfish:兼容 Vue、React、Angular 等多种前端框架。
  • Qiankun:同样支持多种前端框架,但在某些场景下的兼容性和表现可能有所不同。

路由管理

  • Garfish:通过路由规则管理微应用的加载与卸载。
  • Qiankun:采用类似机制,但在细节处理上存在一些差异。

隔离机制

  • Garfish:使用沙箱机制,减少全局变量污染的风险。
  • Qiankun:也提供了沙箱机制,但在某些案例中表现略逊。

配置复杂度

  • Garfish:配置相对简单,路由配置即可启动。
  • Qiankun:配置较为详细,尤其在处理跨域资源和状态管理时。

社区支持和文档

  • Garfish:字节跳动出品,拥有强大的社区支持和丰富的文档资源。
  • Qiankun:社区支持广泛,但文档和示例相对较少。

Garfish 常见问题

Garfish 支持哪些前端框架?

Garfish 支持包括 Vue、React、Angular 在内的多种前端框架,开发者可以根据自身的技术栈选择合适的框架。

如何处理跨域问题?

  1. CORS 设置:确保服务器配置了适当的 CORS 设置。
  2. 代理:在开发环境中使用 Webpack 等构建工具的代理功能。
  3. JSONP:某些 API 场景下,可考虑使用 JSONP 请求。

如何保证微应用间的隔离?

Garfish 内置 VM 沙箱机制,确保微应用之间的资源隔离,避免全局变量污染。

如何调试微应用?

  1. 开发者工具:利用浏览器的开发者工具。
  2. 日志输出:使用 console.log() 等方法输出调试信息。
  3. 单元测试:编写单元测试覆盖微应用的功能点。

结论

Garfish 为微前端开发提供了强大的工具集,能够有效解决跨团队协作、技术体系多样化等问题。Garfish 与 Qiankun 各有优势,选择框架时应根据项目的具体需求和技术偏好。通过遵循本指南,你可以充分利用 Garfish 的强大功能,构建高效、可维护的微前端系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序模版

1.霍尔法 #include <iostream> using namespace std; int partition(int *arr,int left,int right){int pivotIndexleft;while(left<right){while(left<right && arr[right]>arr[pivotIndex]){right--;}while(left<right && arr[left]<a…

vTable实现多维表格

介绍 vTable是字节开发的一款能用来渲染表格的库&#xff0c;是用canvas渲染&#xff0c;避免了传统用dom组件表格的一些问题&#xff0c;能很快的渲染出上万格子的表格。 接下来我将使用vTable构建类似下面的多维表格&#xff0c;其中quantity、sales等是指标。 使用 官网地址…

【精选】基于大数据的___银行信用卡用户的数仓系统的设计与实现(全网独一无二,最新定制)

目录&#xff1a; 关键技术介绍 PYTHON语言简介 大数据介绍 MySql数据库 DJANGO框架 Hadoop介绍 Scrapy介绍 B/S架构 系统的设计 系统总功能模块设计 系统测试 系统测试的目的 软件测试过程 6.3测试用例 参考代码&#xff1a; 为什么选择我&#xff1a; 博主介绍&am…

自动驾驶-机器人-slam-定位面经和面试知识系列10之高频面试题(04)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客也会同步更新&#xff0c;全网同号&#xff08;lonely-stone或者…

Elasticsearch安装 Kibana安装

安装Elasticsearch 一、拉取镜像或者上传 docker pull Elasticsearch 二、将上传的镜像导入(在仓库拉取的这一步跳过) docker load -i es.tar docker load -i 三、创建容器 1.Elasticsearch 注意修改到自己的网络&#xff08;第八行&#xff09; docker run -d \--nam…

2014年4月-2023年上市公司秩鼎ESG评级数据

2014年4月-2023年上市公司秩鼎ESG评级数据 1、时间&#xff1a;2014年4月-2023年11月 2、来源:秩鼎数据 3、指标&#xff1a;证券代码、SC、评级日期、ESG评级、ESG等级、ESG得分、E评级、E等级、E得分、S评级、S等级、S得分、G评级、G等级、G得分、总市值(亿元)、流通市值(…

电脑硬盘坏了怎么恢复数据?

在数字化时代&#xff0c;电脑硬盘作为存储核心&#xff0c;承载着我们的工作文档、学习资料、家庭照片以及无数珍贵的回忆。然而&#xff0c;硬盘作为机械设备&#xff0c;也有其寿命和脆弱性&#xff0c;一旦出现故障&#xff0c;数据恢复便成为了一个紧迫而棘手的问题。本文…

电子元器件之聚丙烯膜电容(CBB)

很多人对硬件感兴趣&#xff0c;要么就是想学一门手艺&#xff0c;找一份相关的工作。要么就是对电子感兴趣&#xff0c;想自己做些东西玩玩。虽然现在很多电子模块已经很成熟了&#xff0c;稍微连接一下线路就能做一个自己电子小制作&#xff0c;网上也有很多教学视频。 但大…

「Python程序设计」基本数据类型:字符串

​在python的程序设计过程中&#xff0c;字符串是需要经常处理的变量类型。字符串在程序中的存储方式&#xff0c;类似于一维数组&#xff0c;每个字符占据数组中的一个单元格。 字符串可以存储字符类型的变量&#xff0c;即使是数字类型&#xff0c;也可以通过字符串来进行存…

(javaweb)maven高级

目录 ​编辑 1.分模块设计与开发 2.继承与聚合--继承关系实现 3.继承与聚合--版本锁定 4.继承与聚合--聚合版本 5.私服 资源的上传与下载 1.分模块设计与开发 分模块&#xff1a;拆分成多个模块进行开发 不分模块&#xff1a;业务代码堆积成一个 不利于项目管理和维护并…

密码生成器(HTML+CSS+JavaScript)

&#x1f30f;个人博客主页&#xff1a;心.c ​ 前言&#xff1a;前两天写了密码生成器&#xff0c;现在跟大家分享一下&#xff0c;大家如果想使用随便拿&#xff0c;如果哪里有问题还请大佬们给我指出&#xff0c;感谢支持 &#x1f525;&#x1f525;&#x1f525;专题文章&…

MySQL 的半同步模式

目录 1 半同步简介: 解决主从数据一致性问题 2 实现半同步模式实践操作 2.1 MASTER 2.2 SLAVE 1 2.3 SLAVE 2 2.4 查看client链接状态 2.5 SLAVE 服务器故障模拟 2.5.1 停止 SLAVE 的 IO_THREAD 2.5.2 查看SLAVE 的IO线程是否关闭 2.5.3 查看 MASTER 上 client 的连接状态…

在树莓派5上使用pytroch进行模型训练—全流程笔记

在树莓派上运行pytroch模型&#x1f680; 在完成了树莓派的一系列基础配置学习之后&#xff0c;按照规划&#xff0c;下一步要做的就是在树莓派上安装一个pytorch&#xff0c;尝试运行一下深度学习的模型&#xff0c;如果可以实现且准速度有一定保证的话&#xff0c;就可以作为…

使用Qt+Visual Stuidio写一个简单的音乐播放器(1)

1.使用QMediaPlayer播放音乐 第三步:在代码头部加上: #include <QtMultimedia/QMediaPlayer> // VS向.pro文件添加代码的方式 #pragma execution_character_set("utf-8") // qt支持显示中文 QMediaPlayer类是一个高级媒体播放类。它可以用来播放歌曲、电…

超分CAMixerSR 使用笔记

目录 超分CAMixerSR 笔记 自己改进的图例示例: 修改目录: 设置预训练模型: 超分CAMixerSR 笔记 自己改进的图例示例: 修改目录: codes/basicsr改为codes/basicsr_m 设置预训练模型: path:pretrain_network_g: F:\project\chaofen\CAMixerSR-main\pretrained_mode…

C++初学(14)

14.1、while循环 和for循环相比&#xff0c;while循环没有初始化和更新部分&#xff0c;它只有测试条件和循环体。 while(text-condition)body首先程序计算圆括号内的测试条件&#xff08;text-condition&#xff09;表达式。如果该表达式为ture&#xff0c;则执行循环体中的…

Docker快速上手

Docker 前言一、基本组成二、常用命令2.1 Docker服务2.2 image相关命令2.3 Container相关命令 三、Docker Volume 容器卷3.1 匿名挂载3.2 具名挂载 四、Docker 网络模式4.1 bridge桥接模式4.2 host主机模式4.3 None模式4.4 Container模式4.5 Customer模式 前言 本篇文章不再赘…

读软件开发安全之道:概念、设计与实施08密码学(下)

1. 对称加密 1.1. symmetric encryption 1.2. 使用各方共享的密钥来隐藏数据 1.2.1. 对称加密在本质上依赖共享密钥 1.3. 所有加密都是通过对明文进行转换&#xff0c;把明文消息&#xff08;或者原始消息&#xff09;变成无法识别的形式&#xff08;也称为密文&#xff09…

我的CSDN-----第128天创作纪念日

机缘 起初的我&#xff0c;是为了在学习代码的过程中通过写博客的方式来巩固自己的知识。后来在遇到不会的问题时可以在csdn上面查找&#xff0c;寻求一点思路&#xff0c;将学到的知识通过博客的方式呈现出来。 收获 每当发布一篇博客后&#xff0c;就会收到很多人的评论加关…

Adobe Animate (AN)软件安装,硬件配置(附安装包)

目录 一、Adobe An 软件简介 Adobe An 软件的特点 Adobe An 软件的优势 下载 二、Adobe An 软件安装 安装前的准备工作 安装过程中的注意事项 安装后的设置 三、Adobe An 软件使用 高级动画技巧 交互设计 优化与性能提升 四、Adobe An 软件快捷键 选择工具快捷键…