monorepo和workspaces概念,lerna工具

一、Monorepo结构

Monorepo 是管理项目代码的一个方式,指在一个项目仓库 (repo) 中管理多个模块/包 (package),不同于常见的每个模块建一个 repo

├── packages
|   ├── pkg1
|   |   ├── package.json
|   ├── pkg2
|   |   ├── package.json
├── package.json

但是 repo 的体积较大。因为各个 package 理论上都是独立的,所以每个 package 都维护着自己的 dependencies,而很大的可能性,package 之间有不少相同的依赖,而这就可能使install时出现重复安装,如果package之间相互依赖,开发人员需要在本地手动执行npm link等。目前最常见的 monorepo问题 解决方案是使用 Lerna 工具和 workspaces 特性。

二、workspaces

workspaces(工作区)是一个通用术语,它指的是从单个顶级根包中管理本地文件系统中的多个包。一个pkg可以认为是一个工作区,可以通过配置属性workspace来指定子包(工作区),如npm <cmd> --workspace=./packages/<pkg>或者npm <cmd> -w /packages/<pkg>。npm、yarn、pnpm都提供了对workspaces的支持,在使用上会有些微的不同。
npm和yarn都需要在package.json中设置workspaces

{
 "workspaces": [
    "packages/*"
  ],
}

pnpm的workspaces的配置都放在pnpm-workspace.yaml文件里,在根目录下新增pnpm-workspace.yaml文件,在该文件中设置。

三、lerna

是一个多包管理工具
1、全局安装

npm i -g lerna

2、初始化项目
在项目文件夹目录下执行

lerna init --independent

lerna的项目目录结构:

- packages
  - project1
    - src
      - index.ts
    - package.json
  - project2
    - src
      - index.ts
    - package.json
  - project3
    - src
      - index.ts
    - package.json
- lerna.json
- package.json
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容