前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Yarn与Lerna管理monorepo

使用Yarn与Lerna管理monorepo

作者头像
我是leon
修改2022-05-11 10:08:39
1.2K0
修改2022-05-11 10:08:39
举报
文章被收录于专栏:leon的专栏leon的专栏

什么是 Yarn workspace

Yarn workspace 是 Yarn 提供的 monorepo 下,管理依赖的机制。对代码仓库下,多个 package 的依赖,进行管理:将共同的依赖,做 hosting(提升)。这样,可以防止 package 中的包重复安装。

workspace 机制,会在根目录下,统一安装依赖到 node_module,并生成 yarn.lock。单个 package 下,不需要再生成 yarn.lock。

如何使用 Yarn workspace

  1. Yarn 启用工作区
代码语言:javascript
复制
yarn config set workspaces-experimental true

命令的含义:添加workspaces-experimental true到系统全局的.yarnrc中。

2.修改根目录的 package.json,添加如下内容:

代码语言:javascript
复制
{
 "private": true,
 ...
 "workspaces": ["packages/*"]
}

配置项含义:

private - 禁止发布根目录内容

workspaces - 设置工作区,声明 workspace 中 package 的路径。值是一个字符串数组,支持 Glob 通配符。

Lerna 安装依赖的方式

Lerna 安装依赖的方式,是使用命令lerna bootstrap

该命令的作用,是 cd 到 package 文件夹下的每个子文件夹,运行npm installyarn install,在子文件夹中生成版本lock文件node_module,单独对依赖进行管理。

Yarn workspace 与 Lerna 结合

结合的方式

  1. 配置 lerna.json
代码语言:javascript
复制
{
 ...
 "npmClient": "yarn",
 "useWorkspaces": true
}
  1. 配置 package.json
代码语言:javascript
复制
{
 "private": true,
 ...
 "workspaces": ["packages/*"]
}

角色的分配

Yarn 负责管理依赖,workspace 会自动对 package 的引用 ,设置软链接(symlink),并且软链接仅在当前 workspace 中生效。

Lerna 负责版本的发布工作,对 package 相互之间的依赖,做好版本管理。

好处

  • 减少项目的磁盘占用空间Yarn 将项目中的共同依赖,提升到根目录下进行安装
  • 自动设置软链接,方便调试Yarn 的 workspace 会自动对 package 的引用,设置 symlink
  • 所有 package 使用同一个 yarn.lock,更少造成冲突且易于审查

使用

  • 首次安装依赖 lerna bootstrap
  • 安装dependencies依赖 yarn add -W [pkg]
  • 安装devDependencies依赖 yarn add -D -W [pkg]

-W 的含义: 安装依赖到 workspace -D的含义: 安装依赖到devDependencies


最近笔者在整理第一本电子书书稿《前端面试手册》,有兴趣的同学可以关注下~

喜欢我文章的朋友,可以通过以下方式关注我:

关注
关注
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Yarn workspace
  • 如何使用 Yarn workspace
  • Lerna 安装依赖的方式
  • Yarn workspace 与 Lerna 结合
    • 结合的方式
      • 角色的分配
        • 好处
          • 使用
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档