使用yarn workspace搭建简单的monorepo项目
前段时间上级主管提出开发过程中使用yarn workspace,之前对其并没有什么了解,对该功能也没有多少热情。知道这两天有同事问我使用yarn workspace管理多个项目,可能会导致项目启动出现问题,经过检查及上网检索大致可以确定是依赖版本的问题导致,就此机会大概了解一下yarn workspace,做点笔记如下:
yarn workspace
多个包互相引用
我们在根目录monorepo中使用yarn工作空间,在monorepo目录下执行yarn init -y生成package.json。新建文件夹packages管理所有的项目
目录如下:
| monorepo
| – | package.json
| – | packages
在packages.json配置如下:
1 | { |
指定packages目录下所有的都是我们管理的包。
假设我们有两个包分别为package_a和package_b,在两个目录下分别yarn init -y,生成配置文件,进行配置。指定入口文件都为index.js,在b包中引入a包并执行install。
目录如下:
| monorepo
| – | package.json
| – | packages
| – | – | package_a
| – | – | – | package.json
| – | – | – | index.js
| – | – | package_b
| – | – | – | package.json
| – | – | – | index.js
代码如下:
包名一般以 父级名称/包名称 命名
1 | // /monorepo/packages/package_a/package.json |
1 | // /monorepo/packages/package_a/index.js |
1 | // /monorepo/packages/package_b/package.json |
1 | // /monorepo/packages/package_b/index.js |
在package_b中执行yarn install之后执行node index.js,可以看到如下内容:
1 | this is package a |
说明package_a被成功引入到package_b中了
要注意的是,由于使用了工作空间,所以node_modules在monorepo目录下,也就是monorepo下边的包可以共用这些依赖
假设我们前后端全部使用ts进行开发,我们对api的一些类型约束在前后端都能用到,我们就可以把所有的接口定义为一个包,这样就可以在前后端代码中引入接口这个包来使用,当然要记得将decleration设置为true生成.d.ts的声明文件
1 | // /monorepo/packages/interface/package.json |
管理的项目使用不同版本的依赖
需要在monorepo目录下的package.json进行配置,在nohoist中配置的依赖则不会被安装到monorepo目录下的node_modules中,而是会安装到具体某一个项目的目录下。
1 | // /monorepo/package.json |
假设如上配置之后,在某一个包中进行yarn add bootstrap之后不会在根目录的node_modules中安装bootstrap,而会在我们安装命令所在的包中安装这个依赖
使用yarn workspace搭建简单的monorepo项目
https://zhaolei-hu.github.io/2022/04/12/使用yarn-workspace搭建简单的monorepo项目/