美文网首页
基于pnpm的monorepo

基于pnpm的monorepo

作者: 回不去的那些时光 | 来源:发表于2023-07-02 16:29 被阅读0次

什么是monorepo

monorepo其实就是一个大包下面包含了许多子包,典型案例有:babel、vue3等知名项目。相对于传统的mutirepo项目,monorepo的优势在于:

  • 统一管理
    可以在外部添加公用包
  • 多包间通信更简单
    这一点在多包间有相互引用的场景下尤为重要

基于pnpm的monorepo模式

pnpm和npm、yarn都是包管理工具,不同的是 pnpm 使用了软链的模式,使包的体积更小,下载速度更快,并且 pnpm 支持 monorepo 方案。这样我们就不用再去找别的技术方案了,节省了调研的时间。

目录结构

monorepo的结构如下

├── packages
|   ├── package1   // 包1
|   |   ├── package.json
|   ├── package2   // 包2
|   |   ├── package.json
├── package.json
├── pnpm-workspace.yaml 配置文件

pnpm-workspace.yaml 配置文件

packages:
  # 所有在 packages/  子目录下的 package
  - 'packages/**'

注意

包最好只使用 pnpm 进行管理,如果和 npm、yarn 进行混用,可以会出现一些兼容性问题。下面我们将 npm、yarn 进行禁用,方法是添加 preinstall npm hook 钩子,这个钩子会在安装模块前触发,检查该代码是否是使用 pnpm 运行,如果不是的话会推出并提示错误。

"scripts": {
    "preinstall": "npx only-allow pnpm"
}

常用语法

  • 如果一个包是子包都需要的,那么我们可以把这个包安装到主包
# -w 全局安装
pnpm i 包名 -S/-D -w 
  • 如果只想在某一个子包进行安装
# --filter 是用来指定子包
pnpm i 包名 -S/-D --filter 子包的名称

# 或者直接切换到子包的目录进行安装
pnpm i 包名 -S/-D
  • 当一个子包需要引用另一个子包
# 通过这个命令,可以在子包2中引用子包1
pnpm i 子包1 --filter 子包2

相关文章

网友评论

      本文标题:基于pnpm的monorepo

      本文链接:https://www.haomeiwen.com/subject/ldmfudtx.html