Pnpm实现Monorepo风格项目搭建

news2024/11/29 1:44:32

Monorepo是什么

与Monorepo对比的是MutiRepo。对于一个复杂的前端架构通常会有多个npm package组成。repo指的是版本仓库。如果多个package放在一个repo仓库中就叫做monorepo。

目前有不少大型开源项目采用了这种方式,如 Babel,React, Meteor, Ember, Angular,Jest, Umijs, Vue, 还有 create-react-app, react-router 等。几乎我们熟知的仓库,都无一例外的采用了monorepo 的方式,可以看到这些项目的第一级目录的内容以脚手架为主,主要内容都在 packages目录中、分多个 package 进行管理。

├── packages
|   ├── admin  # 后台页面
|   |   ├── package.json
|   ├── cms    # 前台页面
|   |   ├── package.json
|   ├── server # 服务端
|   |   ├── package.json
├── package.json

在这里插入图片描述

monorepo 最主要的好处是统一的工作流Code Sharing。比如我想看一个 pacakge 的代码、了解某段逻辑,不需要找它的 repo,直接就在当前 repo;当某个需求要修改多个 pacakge 时,不需要分别到各自的 repo 进行修改、测试、发版或者 npm link,直接在当前 repo 修改,统一测试、统一发版。只要搭建一套脚手架,就能管理(构建、测试、发布)多个 package。

Pnpm实现Monorepo

禁用npm

pnpm 的 monorepo 项目在 node_modules 以及开发中,项目依赖 pnpm workspace 使用 npm 或 yarn 运行时会出现问题。

package.json

"scripts": {
  "preinstall": "node ./scripts/preinstall.js"
}

在这里插入图片描述

实现当运行 npm install 或 yarn,就会发生错误并且不会继续安装。

if (!/pnpm/.test(process.env.npm_execpath || '')) {
  console.log('只能使用pnpm')
  console.warn(
    `\u001b[33mThis repository requires using pnpm as the package manager ` +
      ` for scripts to work properly.\u001b[39m\n`
  )
  process.exit(1)
}

在这里插入图片描述

效果
在这里插入图片描述

建立工作空间

我们需要配置,让pnpm知道我们这个是单包,包括多个子包

pnpm-workspace.yaml

packages:
  # all packages in subdirs of packages/ and components/
  - 'packages/**'

在这里插入图片描述

依赖安装

# 公共包安装
pnpm i vue -w
# 子package安装
pnpm i vue -r --filter server
# 内部依赖package安装
pnpm i  server -r --filter admin

依赖安装

# 安装在root下
pnpm i dayjs -w  

# 安装在ui下
pnpm i dayjs 

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

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

相关文章

基于Hexo和Butterfly创建个人技术博客,(12) 定制化博客站点高级功能,如搜索、在线聊天、自定义样式等

Butterfly官方网站,请 点击进入 部分特效来源于网站的总结,请点击进入 本章目标: 选择自己需要的内容,然后加以实现。本文中涉及的修改方式主要包含三种:1、修改源码;2、扩展源码;3、添加插件&a…

项目进度延误怎么办?给项目经理的6个处理提示

有研究调查称,只有2.5%的企业能100%成功完成他们的项目。影响项目成功的因素有很多,但对项目生产力造成严重损失的一个重要方面是项目延误。 无论是同事请病假,还是客户想要返工,许多事情都可能导致项目延误。当发生这些情况&…

桥梁监测系统多少钱?桥梁监测系统组成部分有哪些?

桥梁作为大多数城市和国家的重要设施,为居民提供了交流和沟通的纽带。然而,随着时间的推移、超荷载的运输和不间断的环境影响,桥梁的状态日益恶化。为了更好的了解桥梁的结构状态,保障桥梁的安全性和可靠性,桥梁监测系…

SQL注入第二章节MYSQL手工注入

SQL注入第二章节MYSQL手工注入 2.1 SQL注入之sqli-labs环境搭建 一、SQLi-Labs是什么? SQLi-Labs是一个专业的SQL注入练习平台,适用于GET和POST场景,包含了以下注入: 基于错误的注入(Union Select) 字符…

信息论/python笔记: 最大信息系数 MIC

1 互信息 sklearn 笔记整理:sklearn.metrics_sklearn中的mean absolute percentage error_UQI-LIUWJ的博客-CSDN博客 2 最大信息系数(MIC,Maximal Information Coefficient) 2.1 方法介绍 衡量两个变量X和Y之间的关联程度&…

知识蒸馏的说明

本文参考: ChatGPT 温度系数t与top-p, 超参怎么设置最优? - 知乎 知识蒸馏系列(一):三类基础蒸馏算法_OpenMMLab的博客-CSDN博客 知识蒸馏算法汇总 - 知乎 知识蒸馏__Old_Summer的博客-CSDN博客 目录 1、 ChatGPT…

一文弄懂mysql事务

首先,什么是事务呢? 事务就是由单独单元的一个或多个sql语句组成, 在这个单元中, 每个sql的语句都是相互依赖的, 而整个单独单元作为一个不可分割的整体存在, 类似于物理当中的原子(一种不可分割的最小单位) 通俗的来讲就是, 事务就是一个整体, 里面的内容要么都执行成功, 要…

大学生找工作的个人简历模板(合集)

大学生找工作的个人简历模板1 个人基本简历 姓名:-国籍:中国 目前所在地:__ 民族:汉族 户口所在地:__ 身材: 婚姻状况:未婚年龄:__岁 培训认证:诚信徽章: 求职…

swagger 入门指南

1. 写在最前面 最近在负责的服务,出现了客户接二连三的投诉 api 参数难以理解的问题。本着从「根本上解决问题」的思路,笔者思考了以下方案: 简化难以理解的参数,重新设计一版 api 优化 api 文档,更易于用户理解 1…

代码随想录算法训练营第四十一天| 343. 整数拆分、96.不同的二叉搜索树

整数拆分 题目链接:力扣 确定dp数组(dp table)以及下标的含义 dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。确定递推公式 然后有两种渠道得到dp[i]: 一个是j * (i - j) 直接相乘。 一个是j * d…

unit4

目录 carpenterovertakeremainderobjectivepasturedespitegulfshepherdinteriorchorusoppressgrinprofessionalresistantfosterleapembarkneutralelasticcirculateintimidatechopprimarystirappraisallayoutsurvivalentertainmoanlocatepublishpacehearingexplosivecricketvolt…

stable-diffusion-webui 快捷安装教程

简介 stable-diffusion-webui 是一个用来装载Stable Diffusion 模型的网页,可以方便的调用模型生成图片。 stable-diffusion-webui的github地址为:https://github.com/AUTOMATIC1111/stable-diffusion-webui 这个库的依赖很多,虽然代码里面有…

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植 1、准备工作 a、用stm32cubemx新建一个工程。 时钟配置 st-link提供8M的mco输出,所以配置hse 8m,sysclk最高100M,设置如下: 配置LED 连接pa5,设…

机器学习-进化算法

进化算法 遗传算法(Genetic Algorithm,GA)crossovermutation 进化策略(Evolutionary Strategies,ES)基因编程(Genetic Programming)Multi-objective Evolutionary Algorithms 遗传算…

certbot 申请免费SSL证书、自动续期

简介 Certbot是一个免费、开源的软件,是Let’s Encrypt的客户端,Let’s Encrypt是证书颁发机构,它们之间使用ACME协议通信,Certbot是Lets Encrypt众多客户端的其中之一,Let’s Encrypt官网推荐CertBot,它能…

AIGC:关于人工智能的那些事

文章目录 前言人工智能发展史起步阶段:20世纪50年代至70年代知识工程阶段:20世纪80年代至90年代数据驱动阶段:2000年至今 人工智能包括哪些技术学习人工智能需要掌握的知识如何开发一个人工智能系统如何开发一个人脸识别系统人工智能未来发展…

mysql密码登录失败、服务启动失败和1045-Access denied for user ‘root‘@‘localhost‘

一、问题: 1.打开 navicate,双击localhost_3306,出现报错2002 - Can’t connect to server on ‘localhost’(10061) 2.查看mysql是否启动 控制面板——管理工具——服务 找到mysql服务,发现无法启动。 3.winR运行cmd&#xf…

windows install pandoc

文章目录 下载安装测试使用 下载 https://github.com/jgm/pandoc/releases 安装 pandoc-3.1.3-windows-x86_64.msi 直接双击一路默认即可。 但安装后并没有得到该命令,我们需要配置环境变量,找到安装的命令位置 C:\Users\XH\AppData\Local\Pandoc\p…

驱动多文件编译和驱动命令行传参

目录 1. 驱动的多文件编译 1.1. 准备两个文件 1.2. 修改Makefile文件 1.3. 执行Make命令生成.ko文件 2. 驱动模块传递参数 2.1. 传递一个参数 2.1.1. 函数原型分析 2.1.2. 撰写.c文件 2.1.3. 撰写makefile 2.1.4. 编译makefile并验证 2.2. 传递多个参数并使用modeinf…

线程的创建和使用(二)

1、线程的类和方法 Thread类是JVM用来管理线程的一个类,换句话说,每个线程都有唯一一个的Thread对象与之关联。 1.1、Thread的常见方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线程对象Thread(String name)创建线程…