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

yarn workspace使用指南

作用

Yarn workspace 是 Yarn 包管理工具中的一个功能,主要用于管理多包项目(monorepo)。它的主要作用如下:

  1. 支持多包结构:允许在一个仓库中管理多个独立的包或项目。
  2. 项目间依赖管理:方便地在不同包之间添加依赖,无需发布到npm。
  3. 统一依赖管理:所有包共享同一 yarn.lock,确保依赖版本一致。
  4. 独立开发环境:每个包可以独立运行命令,如安装依赖或构建。
  5. 环境隔离:避免不同包间的依赖冲突。
  6. 版本控制:在单个仓库中管理所有包的版本。

使用方法

  1. 创建workspace,项目名为workspace-root,然后生成package.json
mkdir workspace-root
cd workspace-root
yarn init -y //初始化项目,生成package.json
  1. workspace项目必须声明私有,避免被发布
{// ...config"private": true,
}
  1. 新建packages目录,用于存放项目

  1. 在packages目录下创建两个项目,并生成package.json,如two、one

  1. 在two和one项目的package.json文件中声明name属性,该属性值即为workspace的名称,如:
{"name": "one", // workspace的名称"version": "1.0.0","main": "index.js","license": "MIT",
}
  1. 在workspace-root目录下的package.js中声明哪些项目是workspace,"workspaces":["packages/*"]表示packages目录下的所有项目都是workspace
{"name": "workspace-root","version": "1.0.0","main": "index.js","license": "MIT","private": true,"workspaces": ["packages/*"]
}

指令

  1. yarn install:安装所有依赖,在workspace-root目录下和one/two目录下执行作用是一致的
  2. yarn workspace [workspace名称(package.json中的name)] add [依赖名称]:给项目添加依赖
yarn workspace one add dayjs
  1. yarn workspace [workspace名称(package.json中的name)] remove [依赖名称]:移除项目依赖
yarn workspace one remove dayjs
  1. yarn workspaces run <command>:在每个workspace下执行
yarn workspaces run dev
  1. yarn workspaces info [--json]:显示当前各workspace之间的依赖关系

注意事项

  1. 某个workspace不需要受yarn workspace管理,怎么办?

在workspace目录下添加.yarnrc文件, 并在文件中添加禁用指令

workspaces-experimental false

  1. 如果多个项目中依赖项目但版本不同时,怎么办?

注意:一般情况下two、one目录下并没有node_modules目录,如果two、one中依赖的版本不同时才可能会有

方式一:workspace-root中的node_modules下载的是dayjs@1.11.12,在one中使用的是dayjs@1.11.13,two使用的是dayjs@1.11.12

# one 项目
yarn workspace one add dayjs@^1.11.13
# two 项目
yarn workspace two add dayjs@^1.11.12

方式二:workspace-root中的node_modules下载的是dayjs@1.11.12,在one中使用的是在one/node_modules目录下下载的dayjs@1.11.13,two使用的是dayjs@1.11.12(workspace-root/node_modules):

# one 项目
yarn workspace one add dayjs@1.11.13
# two 项目
yarn workspace two add dayjs@1.11.12
http://www.xdnf.cn/news/5648.html

相关文章:

  • 配置集群(yarn)
  • 消息队列如何保证消息可靠性(kafka以及RabbitMQ)
  • MySQL全量、增量备份与恢复
  • Qt创建项目
  • 基于千眼狼高速摄像机与三色掩模的体三维粒子图像测速PIV技术
  • 前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事
  • CentOS下安装MySQL数据库
  • node .js 启动基于express框架的后端服务报错解决
  • WEB安全--RCE--webshell bypass2
  • NestJS 知识框架
  • 区块链大纲笔记
  • 人脸识别deepface相关笔记
  • 物联网无线传感方向专业词汇解释
  • git|gitee仓库同步到github
  • JDK动态代理和CGLIB动态代理的区别?
  • 《Head First 设计模式》第一章 - 笔记
  • 关于nextjs中next-sitemap插件生成文件样式丢失问题及自定义样式处理
  • 开启WSL的镜像网络模式
  • git和gdb
  • 《Flutter社交应用暗黑奥秘:模式适配与色彩的艺术》
  • hashCode()和equals(),为什么使用Map要重写这两个,为什么重写了hashCode,equals也需要重写
  • Decimal.js 的常用方法
  • HNUST软件测试B考前最终复习
  • 密码学--仿射密码
  • 配置文件介绍xml、json
  • (自用)Java学习-5.12(Redis,B2C电商)
  • 【A2A】根据A2A的协议标准,不同架构的2个大模型agent的交互,是否都需要实现和对接 client和server模块?
  • NuPlan v1.1 数据集校验
  • 网络原理(TCP协议性质)
  • ARM64内核内存空间布局