通过pnpm实现monorepo管理

140 阅读1分钟

为什么要做monorepo

  1. 使用 monorepo 可以把原本一个项目的多个模块拆分成多个 packages,在 packages 之间相互引用
  2. packages单独发布成包
  3. 提高代码复用
  4. 通用一套打包或者编译操作的配置

搭建项目

初始化一个项目

pnpm init

pnpm-workspace.yaml

项目根目录下新建pnpm-workspace.yaml文件,定义工作空间的根目录,并能够使您从工作空间中包含 / 排除目录(!**/test/**) 。 默认情况下,包含所有子目录。

packages:
  # all packages in subdirs of packages/ and components/
  - 'packages/**'

安装依赖

以vue安装示例

全局依赖

pnpm install vue -w

局部依赖

  1. 进入子项目再安装
cd packages-name
pnpm install vue
  1. 直接安装
pnpm install vue -r --filter packages-name

项目间相互依赖

pnpm i packages-name1 -r --filter packages-name2

Changeset记录包的更改以及版本更新

1. 安装Changeset

pnpm add -Dw @changesets/cli

2. Changeset初始化

pnpm changeset init

3. 修改.changeset/config.json

{
  "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
  "changelog": "@changesets/cli/changelog",
  "commit": false,
  "fixed": [],
  "linked": [],
  "access": "restricted",
  "baseBranch": "main",         // 主分支,这个必须根据项目实际情况修改
  "updateInternalDependencies": "patch",
  "ignore": []
}

Changeset基本使用

1. 生成变更集

用来记录变更的内容

pnpm  changeset
pnpm  changeset add

2. 更新版本

pnpm  changeset  version

后面就是正常publish就可以正常发布了