Vue3+Lerna+Monorepo:落地大型SaaS应用的微前端解决方案

引子

微前端,这个前端界的热门词汇,你听说过吗?它就像是前端世界的"复仇者联盟",将各种技术集结在一起,共同对抗复杂的前端问题。

今天,我将向你展示如何使用 Vue3、Lerna 和 Monorepo 这三个超级英雄,来实现微前端在大型SaaS应用中的实践。

源码地址

准备工作

首先,我们需要确保你的电脑上已经安装了 Node.js 和 npm。然后,我们需要安装 Lerna,这个可以让你像指挥官一样管理你的项目的工具:

js 复制代码
npm install --global lerna

现在,你已经拥有了管理前端项目的超能力!

创建你的超级项目

在你的工作目录中,创建一个新的目录作为你的超级项目(也就是 Monorepo),并进入这个目录:

js 复制代码
mkdir SuperProject && cd SuperProject

然后,使用 Lerna 初始化你的超级项目:

js 复制代码
npx lerna init

恭喜,你的超级项目已经创建成功!

添加你的子项目

将你的 TodoList 和 Cart 项目复制到 packages 目录中。你的目录结构应该如下:

js 复制代码
SuperProject/
  packages/
    TodoList/
    Cart/
  lerna.json
  package.json

看,你的子项目已经整齐地排列在你的超级项目中了!

安装依赖

在你的超级项目的根目录中,使用 Lerna 安装所有的依赖:

js 复制代码
npm install

这就像是给你的子项目喂食一样,让它们拥有生长的能量。

配置路由

在你的 Navigator 项目中,你需要配置 Vue Router 来正确地导航到 TodoList 和 Cart 项目。在你的路由配置文件(通常是 router.ts 或 router.js)中,你可以添加新的路由来引用 TodoList 和 Cart 项目的组件。

首先,你需要在 TodoList 和 Cart 项目的 package.json 文件中添加一个 name 字段,这个字段的值将被用作在其他项目中引用这个项目的名称。例如:

js 复制代码
{
  "name": "todolist",
  "version": "1.0.0",
  ...
}

然后,在你的 Navigator 项目中,你可以像引用 npm 包一样引用 TodoList 和 Cart 项目。例如,如果你想要引用 TodoList 项目的 Home.vue 文件,你可以这样做:

js 复制代码
import TodoListHome from 'todolist/src/App.vue';

最后,你可以在你的路由配置中添加新的路由,以显示 TodoList 和 Cart 项目的 Home.vue 组件。例如:

js 复制代码
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';

import TodoListHome from 'todolist/src/App.vue';

import CartHome from 'cart/src/App.vue';

const routes: Array<RouteRecordRaw> = [
  {
    path: '/todos',
    component: TodoListHome
  },
  {
    path: '/cart',
    component: CartHome
  },

  // 其他路由...

];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

现在,当你访问 /todos 和 /cart 路径时,你应该能看到 TodoList 项目和 Cart 项目的首页组件了。

打包你的项目

现在,你可以使用 Vite 来打包你的 Navigator 项目:

js 复制代码
cd packages/Navigator
npm run build

这就像是把你的子项目打包成一个礼物一样,准备好分享给世界。

查看你的项目

你可以使用 serve 命令来快速查看你的打包结果:

js 复制代码
npm install -g serve
serve -s dist

现在,你可以在浏览器中访问 http://localhost:5000 来查看你的项目了。

关于Git仓库的维护

虽然这个项目在分工上是由三个人各自维护三个不同的工程,但显然项目最终是一个整体大项目,应该维护为一个单一仓库,Monorepo的字面意思也就是单一仓库

结论

恭喜你,你已经成功地创建了一个使用 Vue3、Lerna 和 Monorepo 的微前端项目!现在,你可以像搭积木一样轻松地管理你的前端项目了。记住,每个问题都不是问题,只是你还没有找到解决它的方法。所以,让我们一起探索前端的世界,享受编程的乐趣吧!

  • 微前端是一种将一个大型前端应用分解为多个较小、更易于管理和维护的微应用的架构风格。每个微应用可以由不同的团队独立开发、测试和部署,可以使用不同的技术栈,可以有自己的开发和发布周期。

  • 在本项目中,TodoList 和 Cart 可以被视为微应用,它们可以独立开发和部署,也可以被 Navigator 应用(或其他应用)复用。Navigator 应用则扮演了微前端架构中的"容器"或"壳子"角色,它负责协调和组合微应用,提供统一的用户界面和用户体验。

  • Lerna 和 Monorepo 提供了一种有效的方式来管理和协调微应用的依赖关系,确保它们可以正确地工作在一起。Vite 则提供了一种高效的方式来打包和部署你的应用。

  • 所以,本项目结构和工作流程不仅是微前端的一种实践方案,而且是一种非常有效和高效的实践方案!

相关推荐
web147862107238 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
m0_748247809 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖12 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
青灯文案120 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
m0_7482548825 分钟前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl
ZJ_.36 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营41 分钟前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端1 小时前
0基础学前端-----CSS DAY9
前端·css
joan_851 小时前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui