pnpm + workspace
前置知识
思考🤔:什么是工作空间?
答案:工作空间可以看作是一个共享的区域,所有用于工作的资源都可以从这个区域获取到。
生活中工作空间
在这个工作空间中,通常会包含与工作相关的所有工具和资源,比如办公桌、电脑、文具和文件柜等。这个工作空间是一个集中完成特定任务的地方,所有需要用到的东西都可以在这里找到,方便你高效地完成工作。

软件开发中的工作空间
在软件开发中,工作空间通常指一个用于组织和管理项目文件、资源和工具的逻辑容器。它通常是一个文件夹结构,用于将相关的项目文件、代码、设置和其他资源集中放置在一起。
工作空间的概念在不同的编程语言和开发工具中可能略有不同,但其基本目标都是提供一个集中式环境,以帮助开发者管理和协同开发多个项目。主要功能包括:
- 组织和管理项目文件
- 跨项目共享设置和工具
- 支持协同开发
pnpm中的工作空间
在 pnpm 中,工作空间就是一个管理多个包的环境,它通过独特的依赖管理方式极大地提高了效率。pnpm 的工作空间支持符号链接和硬链接机制,使得不同包之间能够高效地共享依赖,同时保证每个包的独立性。
pnpm工作空间特点:
- 高效的依赖管理
- 节省磁盘空间
- 跨项目的高效协作
pnpm 的工作空间为大型 Monorepo 项目提供了一个强大而灵活的开发环境,使得管理和开发多个包变得更加简单和高效。
pnpm中定义工作空间
在根目录有一个 pnpm-workspace.yaml 的文件,该文件用于定义哪些包会被包含在 workspace 工作空间中,默认情况下,所有子目录下的所有包都会被包含在 workspace 里面。
示例:
packages:# packages/ 下所有子包,但是不包括子包下面的包- 'packages/*'# components/ 下所有的包,包含子包下面的子包- 'components/**'# 排除 test 目录- '!**/test/**'
注意这里表示包范围的语法使用的是 Glob 表示法。
实战演练
创建基于 pnpm + workspace 的 Monorepo 工程,并在工程中封装一个公共的函数库。
安装依赖到工作空间里面:
pnpm add <包名> --workspace-root
or
pnpm add <包名> -w
安装工作空间的一个包到工作空间另一个包里面:
pnpm add <包名B> --workspace --filter <包名A>
该命令表示将 B 包安装到 A 包里面,也就是说 B 包成为了 A 包的一个依赖。其中 B 包后面的 --workspace 参数表示该包来自于工作空间,而非 npm 远程仓库,--filter 表示安装到 A 包里面。
Repo