Yarn Workspace 使用指南
arn 从 1.0 版开始支持 Workspace (工作区)。
Workspace 能更好的统一管理有多个项目的仓库,既可在每个项目下使用独立的 package.json 管理依赖,又可便利的享受一条 yarn 命令安装或者升级所有依赖等。更重要的是可以使多个项目共享同一个 node_modules
目录,提升开发效率和降低磁盘空间占用。
一句话总结就是可以大大简化对多个项目的统一管理。
很多知名的开源项目也使用了 Yarn Workspace,如 vue、react、jest 等。
1. Yarn Workspace 共享 node_modules
依赖详解
projects/
|--project1/
| |--package.json
| |--node_modules/
| | |--a/
|--project2
| |--package.json
| |--node_modules/
| | |--a/
| | |--project1/
{"name": "project1","version": "1.0.0","dependencies": {"a": "1.0.0"}
}
{"name": "project2","version": "1.0.0","dependencies": {"a": "1.0.0","project1": "1.0.0"}
}
如果 project1 和 project2 有相同的依赖项目 a,a 都会各自下载一次,这不仅耗时降低开发效率,还额外占用重复的磁盘空间;当 project 项目比较多的时候,此类问题就会显得十分严重。
如果 project2 依赖 project1,而 project1 并没有发布到 npm 仓库,只是一个本地项目,有两种方式配置依赖:
- 使用相对路径(如 file: 协议)在 project2 中指定 project1 的依赖。
- 使用
yarn|npm link
来配置依赖。
第 1 种方式缺少版本号的具体指定,每次发布版本时都需要相应的依赖版本的修改;第 2 种方式需要自行手工操作,配置复杂易出错。
需要 npm-2.0.0+ 才支持模块间的相对路径依赖,详见 npm 官方文档 package.json/Local Paths
没有一个统一的地方对全部项目进行统一构建等,需要到各个项目内执行
yarn|npm build
来构架项目。
使用 Yarn Workspace 之后,上述问题都能得到很好的解决。而且这是 Yarn 内置的功能,并不需要安装什么其他的包,只需要简单的在 projects 目录(Yarn 称之为 workspace-root)下增加如下内容的 package.json 文件即可。
projects/package.json:
{"private": true,"workspaces": ["project1", "project2"] // 也可以使用通配符设置为 ["project*"]
}
开源社区则都基本上使用
"workspaces": ["packages/*"]
的目录结构,这与 Lerna 的目录结构一致。
在 workspace-root 目录下执行 yarn install
:
$ cd projects
$ rm -r project1/node_modules
$ rm -r project2/node_modules$ yarn install
yarn install v1.22.0
info No lockfile found.
[1/4]
Yarn Workspace 使用指南相关推荐
- 如何使用lerna管理你的仓库
如何使用lerna管理你的仓库 multirepo VS monorepo 在介绍我们今天的主角 lerna 之前,首先了解下什么是 multirepo ?什么是 monorepo ? multire ...
- pnpm 源码结构及调试指南
前言 随着前段时间尤大在 vue3 以及 vite 仓库中切换包管理为 pnpm 的 pr 成功 merge,以及 vue 生态中的一些项目例如 VueUse 也切换使用 pnpm,宣告着 vue 生 ...
- Pnpm Workspace: 单仓库多项目(monorepo)
Pnpm Workspace: 单仓库多项目(monorepo) 文章目录 Pnpm Workspace: 单仓库多项目(monorepo) pnpm vs npm vs yarn Workspace ...
- 为什么使用pnpm可以光速建立好用的monorepo(比yarn/lerna效率高)
前言 首先要说的是, yarn + lerna 的组合已经是现在 monorepo 的通用方案,也是功能最多,最火的方案,使用这套方案绝对是正确的. 但是其上手存在一定的门槛,相比 pnpm 这种自带 ...
- Apache Flink-编程指南-项目设置
Java项目模板 前提条件:Maven3.0.4或更高,Java8 使用如下命令创建Maven项目: $ mvn archetype:generate \-DarchetypeGroupId=org. ...
- 前端架构--从入门到微前端
年中,自己做规划(2019Thinking(上) – 一个前端开发者的个人思考)时,考量了一段时间「微前端」,也关注到了<微前端的那些事儿>的文章,从而了解了作者「黄峰达」,也就购买了下面 ...
- pnpm多包管理项目
pnpm官网 在今年的项目中,领导使用了monorepo多包管理模式来管理项目,具体使用技术为: pnpm vue3 vite ant-design Vue typescript formilyjs ...
- vue 拓扑组件_Authing 登录组件优化实践解析
Authing Guard 是一种可嵌入的登录表单,可根据你的需求进行配置,它使你可以轻松添加各种社会化登录方式,以便你的用户可以无缝登录,并且在不同平台拥有一致的登录体验. Authing 2.0 ...
- 基于pnpm + lerna + typescript的最佳项目实践 - 理论篇
本文来自作者@金虹桥程序员 投稿 原文链接:https://juejin.cn/post/7043998041786810398 本系列文章分为两篇:理论篇和实践篇 理论篇:介绍pnpm(pnpm的特 ...
最新文章
- C++反汇编-加法分析
- 图灵奖得主杨立昆人工智能十问:AI会统治人类吗?
- 003_ZooKeeper服务端集群搭建
- ToString()、Convert.ToString()、(string)、as string 的区别
- 在Windows下搭QT编程环境
- 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互
- 澳大利亚.新西兰C#考试题
- redis入门笔记(1)
- 采样率,码率,帧率,I 帧,P 帧,B帧,RTP时间戳
- 如何在XP SP2下面使用DTC
- DEC VT100 terminal
- 混合使用UITabBarController和UINavigationController
- c4d细分曲面的使用和导出的一些快捷键笔记
- 电脑控制手机 易语言实现颜色识别功能
- 2020腾讯广告算法大赛赛题复现
- centos 确定cpu是arm 还是x86_x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名...
- unity鼠标固定在屏幕中间_unity3D技术之屏幕内跟随鼠标移动
- win7安装python3.8失败_Python3 | Win7系统下无法安装问题解决
- 【超融合】818超融合发展经历了哪几个阶段!
- 35岁的程序员被优化,是市场经济的必然选择吗
热门文章
- 【解决】Mac 10.14 欧路词典窗口大小不可调的问题
- Caliburn.Micro学习笔记(二)----Actions
- 2019年天猫度软件服务年费缴纳折扣优惠及结算标准
- 华云数据与安徽电子信息职业技术学院携手共建智能办公实训室
- 出入口控制在智慧城市建设中的发展与应用
- 已锁定最新绘图 matlab,《MATLAB图像处理375例》——2.2 三维绘图
- JAVA模拟肯德基点餐系统源码,肯德基点餐界面MFC
- MATLAB经典测试图像集 Standard test image
- 各种品牌的主板和笔记本的BIOS快捷启动按键
- java 接口开发时 后台无法获取前端传过来的参数值