umi + monorepo实践

这篇具有很好参考价值的文章主要介绍了umi + monorepo实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为何需要monorepo?

项目背景

目前负责的企微端的应用有三个:

  1. 策略分享:手机端、PC端使用
  2. 单向视频审核:PC端使用
  3. 资配报告:手机端使用

三个项目的相同点:

  1. 后端接口域名相同
  2. 企微的JS-SDK配置基本相同
  3. 希望可以共用Jenkins部署脚本,减少部署脚本的工作量

不同点:

  1. 界面样式不同,有的给PC用,单位是px;有的给手机端用,单位px转为rem;
  2. 所属不同的小应用,项目的关联性不大。

解决方案

1.杂糅在一起,用路由区分

原本采用的方式是将三个项目分成三个目录,写在同一个umi项目中,好处是git仓库只有一个,打包部署方便,坏处是耦合性太高,后期横向扩展受限,不敢轻易公共方法。

2.将公共组件提取出来,项目独立开发

使用dumi开发公共组件库,三个项目独立开发,这样就有4个git仓库,后期随着应用的增加,git仓库随之增加,每个仓库都有node_modules,占用的硬盘也更大。

3.monorepo

将三个项目使用monorepo 的方式整合在一起,好处是只有一个git仓库,pnpm组织的依赖可以减少硬盘占用,项目间可以公用组件或者单独使用自己的组件,灵活度更高。坏处是git仓库权限管理不够细致,多人开发可以看到所有项目。

构建 Monorepo 项目

1.安装pnpm

在使用 monorepo 管理项目时,pnpm 是一个优秀的选择,它有更快的安装速度和更少的磁盘空间占用,能够更好地处理多个项目之间的依赖关系。全局安装 pnpm

npm install pnpm -g

2.创建 monorepo 仓库:

mkdir qw-repo && cd qw-remp
pnpm init

3.在根目录下添加 pnpm-workspace.yaml 文件,告诉 pnpm 哪些目录是工作区,并在安装依赖时将它们链接到一起。

packages:
  - 'packages/**'

4.添加子项目:

mkdir packages && cd packages

# pkg-a
mkdir pkg-a && cd pkg-a
pnpm init

# pkg-b
mkdir ../pkg-b && cd ../pkg-b
pnpm init

5.安装依赖:

# 全局安装 -w: --workspace-root
pnpm add typescript -D -w

# 局部安装
pnpm add typescript -D --filter pkg-a

# 互相安装
pnpm add pkg-a -D --workspace --filter pkg-b

6.安装umi及其他依赖

pnpm add umi -w
pnpm add @types/react-dom -D -w
pnpm add @types/react -D -w
pnpm add typescript -D -w

7.初始化子项目

为了测试,暂时将官方默认的项目复制到子项目中:

复制.umirc.ts、pages、layouts等文件和目录;

修改package.json,添加scripts:

  "scripts": {
    "dev": "umi dev",
    "build": "umi build",
    "postinstall": "umi setup",
    "setup": "umi setup",
    "start": "npm run dev",
  },

执行pnpm run start即可单独跑子项目。

8.批量build

在父项目的package.json中添加:

  "scripts": {
    "build": "pnpm -r --filter=./packages/* run build"
  },

在根目录运行pnpm run build将执行 packages 目录下所有具有 build 命令的包。

9.引用外部公用函数

在根目录新建/utils/index.tsx:

export const testFunc = () => {
    alert('123')
}

子项目中引用:

import {testFunc} from "../../../utils";

    useEffect(() => {
        testFunc()
    }, [])

问题

1.无法识别从umi导入的组件

import {Link, Outlet} from "umi"; //编译器报错:无法解析符号 'Link', 'Outlet'

改为:文章来源地址https://www.toymoban.com/news/detail-782868.html

import {Outlet} from "@@/exports";

到了这里,关于umi + monorepo实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • react umi/max 页签(react-activation)

    思路:通过react-activation实现页面缓存,通过umi-plugin-keep-alive将react-activation注入umi框架,封装页签组件最后通过路由的wrappers属性引入页面。 浏览本博客之前先看一下我的博客实现的功能是否满足需求,实现功能: - 页面缓存 - 关闭当前页 - 阻止事件传播 - 鼠标右键关闭当前

    2024年01月19日
    浏览(51)
  • React、Umi、RN 整体理解

    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? React 是用于构建用户界面的 JavaScript 库 ,起源于 Facebook 的内部项目,该公司对市场上所有 JavaScript MVC 框架都不满意,决定自行开发一套,用于架设 Instagr

    2024年02月05日
    浏览(59)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(59)
  • react umi/max 封装页签组件

    思路:封装一个页签组件,包裹页面组件,页面渲染之后把数据缓存到全局状态实现页面缓存。 浏览本博客之前先看一下我的博客实现的功能是否满足需求,实现功能: - 页面缓存 - 关闭当前页 - 鼠标右键关闭当前 - 鼠标右键关闭其他 - 鼠标右键关闭左侧 - 鼠标右键关闭右侧

    2024年01月18日
    浏览(42)
  • 从javascript到vue再到react:前端开发框架的演变

    目录 JavaScript: 动态语言的基础 JavaScript:Web开发的起点 Vue.js: 渐进式框架的兴起 Vue.js:简洁、高效的前端框架 React.js: 声明式UI的革新 React.js:强大、灵活的前端框架 演变之路与未来展望 演变过程 当提到前端开发中的框架时,JavaScript、Vue.js和React.js是三个最常见的名词。它

    2024年02月07日
    浏览(53)
  • react umi中使用svg线上图片不加载问题

    参考链接: https://www.jianshu.com/p/c927122a6e82 前言: 在react项目中,我们本地通过img标签的src使用svg图片是可以加载的,但是发布到线上图片加载不出来。 解决方案 方案一 使用场景:直接在当前页面引入svg图片 有一个 svgr 插件,是支持以 react component 的方式,引入 svg 图片的。

    2024年02月11日
    浏览(38)
  • JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)进行简化比较。 MERN 技术栈包含四大具体组件: MongoDB:一款强大的 NoSQL 数据库,以灵活的 JSON 格式存储数据。 Express.js:一套极简但强大的

    2024年02月03日
    浏览(58)
  • 2023年最新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新

    HTML篇 CSS篇 JS篇 Vue篇 TpeScript篇 React篇 微信小程序篇 前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新 1. 谈谈你对MVVM开发模式的理解? MVVM是一种简化用户界面的 实践驱动编程方式 。在当前主流的前后端分离的开发模式中,MVVM模式的优越性日益体现,相较

    2024年02月10日
    浏览(58)
  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

    🎉欢迎来到Java学习路线专栏~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水

    2024年02月11日
    浏览(49)
  • react--umi, 根据权限展示菜单,完成页面权限分配,以及路由鉴权

           umi框架,prolayout布局,access设置菜单权限,initialState全局初始化数据,配合使用,根据后端返回的权限信息,完成菜单的不同的权限的不同展示。     1. umi 配合 patlayout 布局, 实现根据配置的路由展示菜单栏     2. umi 的 access 插件,设置不同权限的菜单展示    

    2024年02月06日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包