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

OpenTiny NEXT 从入门到精通·第 6 篇

OpenTiny NEXT 从入门到精通·第 6 篇架构篇——跨框架集成与微前端实战在企业级前端开发中多技术栈共存、存量系统迁移、微前端集成是绕不开的三大难题。你可能正在维护一个 Vue 2 的老项目新业务要用 Vue 3 开发团队中还有 React 技术栈的成员你可能要在一个微前端架构中让不同子应用共用一套 UI 组件库还要避免样式冲突。OpenTiny 凭借其独特的Renderless 架构和Shadow DOM 样式隔离为这些场景提供了优雅的解决方案。本篇将带你深入跨框架集成的技术原理并实战微前端场景下的 OpenTiny 应用。在技术快速迭代的今天很少有团队能从零开始采用全新技术栈。大部分企业面临的是既有 Vue 2 的遗留系统又有 Vue 3 的新项目还可能有 React 的技术团队。如何让一套组件库同时服务于所有技术栈如何让不同技术栈的子应用在微前端架构中和谐共存如何将存量系统平滑迁移到新架构OpenTiny 的核心设计目标之一就是解决多技术栈并存问题。它不绑定特定框架而是通过 Renderless 架构实现一套组件逻辑支持 Vue 2、Vue 3、React 等多个框架。同时OpenTiny 组件基于 Shadow DOM 天然实现了样式隔离成为微前端架构的“最佳拍档”。本篇文章将从以下几个方面展开跨框架集成的技术原理Renderless 架构如何实现一套代码多框架运行微前端场景下的 OpenTiny 实践基于无界Wujie的集成实战存量系统迁移策略Vue 2 到 Vue 3 的平滑过渡一、跨框架集成的技术原理1.1 Renderless 架构如何实现一套代码支持 Vue/React/Solid回顾第二篇中介绍的 Renderless 架构其核心是将组件拆分为三层逻辑层Renderless纯 TypeScript 实现包含组件的状态、方法、生命周期不依赖任何 UI 框架。模板层Template框架特定的模板代码负责将逻辑层的数据和事件绑定到 DOM。样式层StyleCSS 样式使用 CSS Variables与框架无关。这套架构的威力在于逻辑层可以完全复用只需为每个目标框架编写一个轻量级的“适配层”即模板组件。目前 OpenTiny 官方已支持 Vue 2、Vue 3、React、Solid社区也在贡献 Angular 等适配。代码复用度示意┌─────────────────────────────────────────────┐ │ 逻辑层Renderless │ │ ~500 行 TypeScript 代码 │ │ 只写一次 │ └──────────────┬──────────────┬───────────────┘ │ │ ┌──────────▼──────┐ ┌─────▼──────────┐ │ Vue 适配层 │ │ React 适配层 │ │ ~50 行代码 │ │ ~50 行代码 │ └─────────────────┘ └────────────────┘以 Button 组件为例Vue 和 React 的适配层代码都非常薄只是将逻辑层暴露的属性和事件桥接到各自框架的语法上。1.2 Vue 适配层 vs React 适配层的设计差异虽然逻辑层复用但由于 Vue 和 React 的响应式机制和生命周期不同适配层需要做一些差异处理维度Vue 适配层React 适配层状态管理使用 Vue 的ref/reactive使用 React 的useState生命周期映射到 Vue 的mounted/updated映射到useEffect属性传递v-bind自动展开需手动解构 props事件处理click语法糖onClick需绑定但所有这些差异都被封装在适配层内部上层业务使用同一套组件 API无论底层是 Vue 还是 React。1.3 Web Components 天然跨框架的优势除了 Renderless 架构OpenTiny 还支持将组件编译为Web Components。Web Components 是浏览器原生标准可以在任何框架甚至无框架中使用真正实现“一次编写到处运行”。将 TinyVue 组件打包为 Web Componentnpmrun build:wc在 HTML 中直接使用!DOCTYPEhtmlhtmlheadscriptsrc./dist/tiny-button.js/script/headbodytiny-buttontypeprimary点击我/tiny-buttonscriptdocument.querySelector(tiny-button).addEventListener(click,(){alert(Hello from Web Component)})/script/body/html在 React 中使用 Web Componentimport ./dist/tiny-button.js function App() { return tiny-button typeprimary onClick{() console.log(clicked)} 按钮 /tiny-button }资深提示Web Components 虽然跨框架但也有一些局限如 SSR 支持不完善、复杂事件传递较麻烦。OpenTiny 推荐在大部分场景下使用 Renderless 适配层Web Components 可作为补充方案用于需要完全框架无关的场合如嵌入第三方站点。1.4 从 0 到 1 实现跨框架组件库的完整流程如果你也想构建自己的跨框架组件库可以参考以下步骤设计纯逻辑层使用 TypeScript 编写组件核心逻辑不引入任何框架 API。状态管理可使用原生Proxy或发布订阅模式。定义统一接口逻辑层暴露标准 API如setProps、on、emit。编写框架适配器为每个目标框架写一个薄封装将框架的属性/事件映射到逻辑层的 API。处理框架差异如生命周期映射、响应式转换。编写样式使用 CSS Variables确保样式不依赖框架。构建与发布每个适配器独立打包发布到不同 npm 包如my-lib/vue、my-lib/react。OpenTiny 的源码正是遵循这一流程你可以参考其实现。二、微前端场景下的 OpenTiny 实践2.1 微前端架构的核心挑战微前端架构将一个大型前端应用拆分为多个独立开发、部署的子应用。这种架构带来了几个核心挑战挑战说明样式隔离子应用的 CSS 不应影响主应用或其他子应用JS 沙箱子应用的全局变量不应污染全局环境应用间通信主应用与子应用、子应用之间需要共享数据多技术栈共存不同子应用可能使用不同的框架Vue 2/3、React2.2 为什么 OpenTiny 是微前端的“最佳拍档”——Shadow DOM 样式隔离传统 CSS 隔离方案如 CSS Modules、Scoped CSS、BEM 命名约定都需要开发者主动遵守容易出错。而Shadow DOM是浏览器原生提供的样式隔离机制——在 Shadow DOM 内部的样式不会影响到外部外部样式也不会渗透进来。OpenTiny 组件可选择性地启用 Shadow DOM 封装。启用后组件的样式被完全隔离在 Shadow Root 内部无论父页面是什么样式组件外观始终保持一致。这从根本上解决了微前端中的样式冲突问题。启用 Shadow DOM 的示例template tiny-button shadow-dom我是隔离样式的按钮/tiny-button /template资深提示启用 Shadow DOM 后全局弹窗如 Modal、Message需要特殊处理因为弹窗通常挂载到body会脱离 Shadow DOM。OpenTiny 内部已做了适配这些浮层组件会自动挂载到外部确保功能正常。2.3 基于无界Wujie微前端框架的集成实战无界Wujie是腾讯开源的微前端框架相比 qiankun 有以下优势使用 Web Component 实现子应用加载天然的 JS 沙箱和样式隔离。支持子应用保活、预加载。对子应用侵入性极低几乎不需要改造。下面我们以无界为例演示如何集成 OpenTiny 子应用。步骤 1主应用安装无界npminstallwujie-vue3-S步骤 2主应用中注册并加载子应用!-- 主应用 App.vue -- template div h1主应用/h1 WujieVue namesub-app urlhttp://localhost:8081 :props{ token: userToken } / /div /template script setup import WujieVue from wujie-vue3 /script步骤 3子应用OpenTiny Vue 3无需特殊改造子应用可以是一个普通的 OpenTiny Vue 3 项目正常开发即可。无界通过 Web Component 加载子应用OpenTiny 的 Shadow DOM 样式隔离与之完美兼容。步骤 4主应用与子应用共用一套 opentiny/vue为了避免重复加载组件库代码可以让主应用和子应用共用同一份 OpenTiny 资源。通过无界的plugins配置可以共享依赖// 主应用中配置共享依赖WujieVue.setupApp({name:sub-app,url:http://localhost:8081,plugins:[{// 将主应用的 opentiny/vue 暴露给子应用windowExcludes:[opentiny/vue]}]})2.4 主应用与子应用共用一套 opentiny/vue-renderless更进一步的优化是让主应用和子应用共用逻辑层opentiny/vue-renderless而各自独立使用框架适配层。这样可以确保所有子应用的组件行为完全一致且避免重复加载。实现方式将opentiny/vue-renderless作为共享依赖通过 webpack 的ModuleFederationPlugin或无界的plugins暴露给子应用。每个子应用只需引入框架适配层opentiny/vue逻辑层从主应用获取。2.5 多技术栈子应用共用同一组件库无界支持不同技术栈的子应用Vue 2、Vue 3、React。每个子应用都可以独立引入对应框架的 OpenTiny 适配包Vue 2 子应用opentiny/vue2.xVue 3 子应用opentiny/vue3.xReact 子应用opentiny/react由于 OpenTiny 各框架适配包的组件 API 完全一致开发者可以在不同子应用中用同样的方式编写组件大大降低了多技术栈团队的协作成本。三、存量系统迁移策略3.1 Vue 2 项目如何渐进式引入 OpenTiny如果你有一个庞大的 Vue 2 旧项目全部重构不现实。OpenTiny 支持渐进式迁移——你可以只在新开发的模块中使用 OpenTiny旧模块继续使用原有组件库。步骤 1安装 opentiny/vue2.xnpminstallopentiny/vue2--save步骤 2在需要使用的组件中按需引入template div !-- 旧模块继续用 Element UI -- el-button旧按钮/el-button !-- 新模块用 OpenTiny -- tiny-button typeprimary新按钮/tiny-button /div /template script import { TinyButton } from opentiny/vue export default { components: { TinyButton } } /script步骤 3全局样式不冲突OpenTiny 的样式使用 CSS Variables且支持 Shadow DOM不会与 Element UI 等旧组件库产生冲突。3.2 Vue 2 到 Vue 3 迁移中组件库无缝切换的方案当你的项目从 Vue 2 升级到 Vue 3 时OpenTiny 最大的优势就体现出来了同一套组件 API无缝切换。迁移方案先将项目中所有旧组件库的引用替换为 OpenTiny在 Vue 2 下。验证功能正常后升级 Vue 3 框架。将opentiny/vue从 2.x 版本升级到 3.x 版本。无需修改组件代码因为 OpenTiny 在 Vue 2 和 Vue 3 下的 API 保持一致。这与其他组件库Element UI → Element Plus需要大量改动代码形成鲜明对比。3.3 与 Element UI 的 API 兼容性——降低迁移成本OpenTiny 在设计时参考了主流组件库的 API并提供了一组兼容层可以降低从 Element UI 迁移的成本。兼容性映射示例Element UIOpenTiny差异el-buttontiny-button前缀不同属性基本一致el-tabletiny-grid属性名略有差异提供迁移工具el-formtiny-form校验规则完全兼容OpenTiny 社区提供了迁移辅助工具可以自动扫描项目中的 Element UI 组件并给出替换建议和代码修改脚本大幅降低人工迁移成本。npx opentiny/migrate scan ./src--fromelement-ui四、实战搭建一个多技术栈微前端应用下面我们通过一个完整示例展示如何搭建一个主应用Vue 3 OpenTiny和两个子应用Vue 2 OpenTiny、React OpenTiny。4.1 主应用Vue 3 无界!-- 主应用 App.vue -- template div classlayout tiny-menu :menusmenus selecthandleMenuSelect / div classcontent WujieVue v-ifcurrentApp :namecurrentApp.name :urlcurrentApp.url :alivetrue / /div /div /template script setup import { ref } from vue import WujieVue from wujie-vue3 import { TinyMenu } from opentiny/vue const currentApp ref(null) const menus ref([ { name: vue2-sub, title: Vue2子应用, url: http://localhost:8081 }, { name: react-sub, title: React子应用, url: http://localhost:8082 } ]) const handleMenuSelect (menu) { currentApp.value menu } /script4.2 Vue 2 子应用OpenTiny Vue 2子应用无需特殊改造保持正常的 OpenTiny 开发方式。注意使用opentiny/vue2.x。4.3 React 子应用OpenTiny React使用opentiny/react包import { TinyButton, TinyGrid } from opentiny/react function App() { return ( div TinyButton typeprimaryReact 子应用中的按钮/TinyButton TinyGrid data{data} columns{columns} / /div ) }4.4 效果验证启动主应用和各个子应用后通过主应用的菜单切换可以看到不同技术栈的子应用都能正常渲染且样式互不干扰。总结本篇我们深入探讨了 OpenTiny 在多技术栈和微前端场景下的强大能力跨框架集成Renderless 架构实现一套组件逻辑支持 Vue 2/3、React、Solid 等多个框架。Web Components 方案提供完全框架无关的使用方式。提供从 0 到 1 构建跨框架组件库的完整方法论。微前端实践Shadow DOM 从根本上解决样式隔离问题是微前端的“最佳拍档”。基于无界Wujie的集成实战多技术栈子应用共用同一组件库。主应用与子应用可共用逻辑层避免重复加载。存量系统迁移Vue 2 项目可渐进式引入 OpenTiny新旧组件库共存。Vue 2 升级 Vue 3 时OpenTiny 实现 API 无缝切换迁移成本极低。提供与 Element UI 的兼容层和迁移辅助工具。无论你的团队是 Vue 2 遗存与新项目并存还是需要构建一个多技术栈的微前端架构OpenTiny 都能提供一致、可靠的技术支撑。它不仅是组件库更是企业级前端架构的“粘合剂”。下篇预告《实战篇——从零打造企业级智能应用》将综合运用前 6 篇文章的知识带你完整构建一个具备 AI 能力的企业级应用涵盖项目规划、页面开发、AI 智能化改造、部署运维等全流程敬请期待如果觉得本文对你有帮助欢迎点赞、收藏、评论你的支持是我持续创作的动力

相关文章:

OpenTiny NEXT 从入门到精通·第 6 篇

OpenTiny NEXT 从入门到精通第 6 篇:架构篇——跨框架集成与微前端实战在企业级前端开发中,多技术栈共存、存量系统迁移、微前端集成是绕不开的三大难题。你可能正在维护一个 Vue 2 的老项目,新业务要用 Vue 3 开发,团队中还有 Re…...

RPA入门,看这篇就够了

一、基础定义:RPA究竟是什么? 机器人流程自动化(Robotic Process Automation,简称RPA)是一种通过软件程序模拟人类在计算机上的操作行为,依据预设规则自动执行重复性、规则性任务的应用软件技术。简单来说&…...

OpenClaw自动化招聘工具:千问3.5-35B-A3B-FP8筛选简历截图并生成面试问题

OpenClaw自动化招聘工具:千问3.5-35B-A3B-FP8筛选简历截图并生成面试问题 1. 为什么需要自动化招聘工具 去年帮朋友公司处理校招季简历时,我深刻体会到人工筛选的痛点:连续三天熬夜翻阅800多份PDF简历,眼睛酸胀不说,…...

call、apply和bind的原理及使用场景

在JavaScript 中,call、apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到接花移木的效果 原理: 1、call(thisArgs [,args...]) 该方法可以传递一个thisArgs参数和一个…...

Swoole vs RoadRunner vs PHP-PM:异步I/O配置参数对比表(含内存泄漏率、上下文切换耗时、FD复用率实测)

第一章:Swoole vs RoadRunner vs PHP-PM 异步I/O配置全景概览现代PHP高性能服务化方案中,Swoole、RoadRunner 和 PHP-PM 均通过常驻内存与异步I/O机制突破传统PHP-FPM的阻塞模型,但其实现路径、依赖模型与配置范式存在本质差异。三者均不依赖…...

AI Agent 安全养虾实战:从零基础到专家的阿里云全栈进阶指南

开篇 通关前置认知:为什么AI Agent时代,“安全养虾”是从业者的必修课? 2024-2026年,AI Agent迎来产业级爆发拐点,“养虾”一跃成为横跨数字科技与实体农业两大赛道的全民热词,其背后是两大万亿级市场的核心…...

OPUS编解码器在audio DSP上的移植和应用吨

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...

C语言-------聚合数据类型

一、结构体1.结构体概念与创建结构体(Struct)是在编程中用于组合多个相关数据项的复合数据类型,它允许将不同类型的数据(如整数、字符、数组,甚至其他结构体)聚集在一起,形成一个逻辑上的整体&a…...

一款基于 .NET 开源、跨平台应用程序自动升级组件奈

基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico亚

1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...

彻底搞懂词元(Token)!小白科普,看完再也不懵

不管是用ChatGPT、豆包这类AI工具,还是刷AI相关的科普内容,你一定绕不开一个词——词元(Token)。 “AI生成内容有词元(Token)限制”“付费按词元(Token)计价”“训练AI要先分词元&a…...

中设智控亮相陕西设备管理工作会议,AI赋能方案引领智能运维新变革

2026年3月25日-27日,2026年陕西省设备管理与装备制造工作会议在陕西省汉中市成功召开。本次会议聚焦装备制造业高质量发展与设备管理智能化升级,吸引了众多行业专家与企业代表参会。广东中设智控科技股份有限公司(以下简称 “中设智控”&…...

食品行业设备管理系统:筑牢合规追溯防线,规范清洁维护记录

食品行业的核心底线是“安全与合规”,而生产设备作为食品加工的核心载体,其清洁度、运行状态、维护记录直接决定食品质量,更是应对SC、HACCP、ISO22000等合规审计的关键。不同于其他行业,食品生产设备(如搅拌罐、灌装机…...

落地即能用!声振温监测部署全流程:设备在线状态监控搭建指南

设备在线状态监控的核心,是通过声振温三大核心数据,捕捉设备隐性故障前兆,实现“早发现、早预警、早处置”,避免非计划停机。而声振温监测的部署,并非简单的“装传感器、连系统”,需遵循科学流程&#xff0…...

ROS2核心概念与架构详解:从零开始机器人操作系统(1)

一、顶级架构一句话总结节点 → DDS通信 → 话题/服务/动作 → 参数 → 工具链 → 机器人应用ROS2(Robot Operating System 2)是新一代开源机器人操作系统,采用DDS作为通信中间件,去掉了ROS1的Master节点,提供更好的实…...

APA第7版参考文献格式:Microsoft Word用户的终极解决方案

APA第7版参考文献格式:Microsoft Word用户的终极解决方案 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 你是否曾在深夜为论文参考文献格式…...

3分钟搞定APA第7版:微软Word参考文献格式终极配置指南

3分钟搞定APA第7版:微软Word参考文献格式终极配置指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 你是否在为学术论文的参考文献格式而…...

HagiCode Soul 平台技术解析:从需求萌发到独立平台的演进之路烤

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

进程与线程的核心区别:一篇看懂,告别混淆

在编程学习中,尤其是接触 C 多线程、操作系统相关知识时,进程(Process)和线程(Thread)是两个绕不开的概念。很多新手会把二者混为一谈,甚至像之前我被问到的那样,疑惑“进程是不是线…...

C语言逆向学习基础课 第8课 函数原型与可变参数使用误区

文章目录C语言实战高频深度错误解析一、第8课 函数原型与可变参数使用误区1.1 课程目标1.2 核心知识点讲解1.2.1 函数原型的作用与高频陷阱1.2.2 可变参数函数的正确使用(重点误区)1.3 实战示例(综合错误排查)1.4 课后作业&#x…...

Java面试题知识图谱构建:利用PyTorch 2.8图神经网络(GNN)技术

Java面试题知识图谱构建:利用PyTorch 2.8图神经网络(GNN)技术 1. 引言:Java面试题的痛点与解决方案 对于准备Java面试的开发者来说,最大的挑战不是找不到学习资料,而是面对海量分散的知识点无从下手。JVM…...

Qwen3.5-9B-AWQ-4bit VMware虚拟机安装Ubuntu及GPU环境配置

Qwen3.5-9B-AWQ-4bit VMware虚拟机安装Ubuntu及GPU环境配置 1. 准备工作 在开始之前,我们需要确认几个关键事项: 主机硬件配置:确保你的物理机至少16GB内存(推荐32GB),并配备NVIDIA GPU(支持…...

LFM2.5-1.2B-Thinking-GGUF效果对比:Thinking中间过程vs后处理终版答案差异

LFM2.5-1.2B-Thinking-GGUF效果对比:Thinking中间过程vs后处理终版答案差异 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源受限的环境中快速部署和使用。该模型采用GGUF格式,通过内置的llama.…...

Ostrakon-VL-8B多实例负载均衡部署:应对高并发访问的策略

Ostrakon-VL-8B多实例负载均衡部署:应对高并发访问的策略 1. 引言 你有没有遇到过这种情况?自己辛苦部署好的AI模型,平时用着挺顺,可一旦用户量突然上来,或者搞个线上活动,服务就卡得不行,甚至…...

G-Helper:华硕笔记本性能调校的终极解决方案

G-Helper:华硕笔记本性能调校的终极解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and o…...

大厂飞手技术栈拆解:从CAAC执照到无人机“机长”的技术成长路径

一、核心事件:大厂飞手成为“技术蓝领”新标杆2026年,低空经济正式进入规模化运营阶段。美团无人机单日配送突破10万单,京东物流无人机覆盖全国超2000个村镇。根据猎聘大数据研究院发布的《2026中国低空经济人才发展报告》,低空经…...

记一次综合型流量分析 | 添柴不加火游

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

重构联盟营销合作伙伴 ROI:除了销售额,这 3 个指标才是增长晴雨表

在营销领域,你对各种指标早已习以为常:它们决定预算投放方向、验证活动成效、帮助你做更聪明的增长决策。但当这些理念切换到“合作伙伴营销”(Partner Marketing)或“渠道增长计划”时,许多团队却只盯着一个指标&…...

.NET源码生成器基于partial范式开发和nuget打包嚷

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

FreeRTOS实时操作系统核心特性与开发实践

1. FreeRTOS 系统概述FreeRTOS作为当前嵌入式领域最流行的实时操作系统之一,已经服务全球开发者超过18年。我第一次接触这个系统是在2015年开发工业控制器时,当时需要在STM32F103上实现多任务调度。相比裸机开发,FreeRTOS提供的任务管理机制让…...