monorepo

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

(一)monorepo 管理

1. monorepo 是管理项目代码的一种方式,指在一个仓库项目(repo)中管理多个模块/包(package)

2. monorepo 最主要的好处是统一的工作流和代码共享

3. Lerna 是一个管理多个 npm 模块的工具,优化维护多包的工作流,解决多个包相互依赖,且发布需要手动维护多个包的问题

(二)monorepo 优点

1. 一个仓库维护多个模块,方便好找

2. 方便版本管理和依赖管理,模块之间的引用和调试都比较方便

3. 方便统一生成 changeLog 

(三)monorepo 缺点

1. 需要统一的构建工具,需要构建工具能够构建所有的模块

2. 仓库体积变大

(四)项目实战

1. 安装 lerna:lerna 是 monorepo 的工具

// 全局安装 lerna
npm install --global lerna

// 创建文件夹 lerna-repo
git init lerna-repo

// 进入文件夹 lerna-repo
cd lerna-repo

// lerna 初始化
lerna init

monorepo

monorepo 新建的项目目录结构如上

 (五)yarn workspace

1. yarn workspace 允许我们使用 monorepo 的形式来管理项目,也是一个工具

2. 在安装 node_modules 的时候,它不会安装到每个子项目的 node_modules 里,而是直接安装到跟目录 node_modules 下面,这样每一个子目录都可以读取到根目录的 node_modules

3. 整个目录下面只有根目录一个 yarn.lock 文件,子项目也会被 link 到 node_modules 下面,这样就允许我们直接用 import 导入对应的项目

4. yarn.lock 文件是自动生成的,也完全 yarn 来处理,yarn.lock 会锁定你安装的每一个依赖的版本,这可以确保不会意外获得不良依赖

(六)lerna 命令

1. 创建子仓库

lerna create 仓库名称

2. 查看子仓库列表

lerna list

monorepo

3.  全局安装某一个包,整个通用

lerna add package

4. 子仓库单独安装某一个包

// 模版
lerna add package --scope=repo --dev

// 例子 安装 @vue/composition-api 到 button 这个仓库下
lerna add @vue/composition-api --scope=button --dev
// 模版
lerna add package --scope=repo

// 例子 安装 @vue/composition-api 到 button 这个仓库下
lerna add @vue/composition-api --scope=button

我们创建子仓库后,根目录 package.json 就会比变成这样

{
  "name": "root",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "devDependencies": {
    "lerna": "^5.5.1"
  }
}

workspace 的 作用域是 package 文件夹~

monorepo 的好处是当你正式发包之前,就可以进行测试,没问题了再发包

5. 建立包与包之间的相互依赖

比如 packages 下面有两个包 metricsBtn 和 info-package,现在需要在 info-package 中引入 metricsBtn,例子如下:

'use strict';

module.exports = infoPackage;
import metricsbtn from 'metricsBtn';
function infoPackage() {
    return "Hello from infoPackage~~~~";
}

console.log(metricsbtn(), 'metricsbtn')

之后,在项目根终端中执行

yarn install

完毕后,可以在跟目录的node_modules 中,发现。 info-package也 引入了 metricsBtn,而且当修改 metricsBtn 中的内容,保存后,node_modules 会自动更新!文章来源地址https://www.toymoban.com/news/detail-488496.html

lerna exec       // 在每个包中执行任意命令
lerna changed    // 检查自上次发布以来哪些软件包已经更新
lerna diff       // 自上次发布以来,对所有包或单个包进行区分
lerna publish    // 发布版本
lerna clean      // 清除项目中所有 node_modules
lerna init       // 初始化项目
lerna create     // 创建项目中的子package
lerna run        // 在包含该脚本的包中运行 npm 脚本

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

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

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

相关文章

  • 项目开发代码分支管理

    项目开发流程系列 项目开发混淆从初识到理解 项目开发代码分支管理 博客创建时间:2022.08.27 博客更新时间:2022.08.28 以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。 在团队开发中,当有多个需求版本进行并发

    2023年04月08日
    浏览(82)
  • 对称加密原理 - 一种古老的加密方式

    哈希是打开加密货币的第一把钥匙,我们已经深度剖析了如何证明工作量、梅克尔树如何检测防篡改以及区块链牵一发而动全身的链式结构,为学习加密货币奠定良好基础。我们今天讨论对称加密技术的基本原理。 请大家关注 gitcoins抖音频道 ,我们将会分享有趣的、高质量

    2024年02月01日
    浏览(42)
  • 探索一种C++中构造对象的方式

    本文展示一种构造对象的方式,用户无需显式调用构造函数。 对于有参数的构造函数的类,该实现在构造改对象时传递默认值来构造。当然用户也可以指定(绑定)某个参数的值。 实现思路参考boost-ext/di的实现。 来看下例子: 例子比较简单,构造一个ObjectCreator对象,并调用他

    2024年02月07日
    浏览(36)
  • 【项目实战】——商品管理的制作完整代码

    👨‍💻个人主页 :@开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏 :PHP程序开发 —   与一维数组相比,二维数组能够存储更加丰富的数据。相对于一维数组只有一键值维度–列,二维数组具有两个

    2024年04月09日
    浏览(49)
  • elasticsearch 快照丢失部分的恢复 ----- 一种解决方式

    前文   es提供了数据备份和恢复的方式,可以很方便的供数据备份,同时应用于多套环境,且可以自定义备份目标(比如具体到索引),可以自定义备份策略(比如每天早上定时备份),可以说是非常方便,关于如何备份,网上的文档很多,有机会我也出一篇。另外,关于

    2024年02月15日
    浏览(43)
  • iOS中一种超简单的路由实现方式

    看了很多的路由实现方式,发现实现的都太复杂,越是复杂的东西越是难以维护,当然复杂的东西好处就是覆盖面比较全。而本文则是使用一种比较简单的方式实现路由的,当然如有建议或者想法可以及时跟我沟通,让我也能有更好的进步。 背景 对于大型项目,由于编译时

    2024年02月12日
    浏览(32)
  • ViewOverlay-加蒙层真的一种实现方式

    一、ViewOverlay能实现什么?     在Android中,ViewOverlay是一个特殊的视图层,可以在一个视图的上方添加和管理附加的视图层,而不会干扰原始视图的布局和交互。它提供了一种方便的方式来在运行时添加、移除或修改视图层,而 无需修改原始布局。 二、基础用法 2.1 一个简

    2024年02月08日
    浏览(32)
  • 学生请假管理系统(需求说明+项目(部分代码))

    软件需求说明书 开发本系统的目的,就是要解决目前我校关于学生请假和管理请假事务所面临的一系列问题。 说明: 计算机学院请假管理系统; 目前我校基本上是采用线下请假,学生先是向班主任说明情况,班主任再向辅导员进行报告,然后学生去辅导员那里申请请假并盖

    2024年01月22日
    浏览(61)
  • Java版本的工程项目管理系统源代码之工程项目管理系统面临的挑战

    ​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承包企业或勘察、设计、供货、施

    2024年02月03日
    浏览(50)
  • github 通过ssh进行连接的另一种方式

    一般使用ssh连接是通过22端口。如果已经把ssh公钥假如到了github中还无法连接。可以通过 测试一下。如果报出 ssh: connect to host github.com port 22: Connection timed out 可以通过443 端口进行连接 注意:端口 443 的主机名为 ssh.github.com,而不是 github.com。 也需修改项目地址

    2024年01月20日
    浏览(73)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包