在 Monorepo 中,Workspace 指的是包含所有项目的代码仓库的工作空间。
一个 workspace 的根目录下必须有 pnpm-workspace.yaml
文件
pnpm-workspace.yaml
定义了 工作空间 的根目录,并能够使您从工作空间中包含 / 排除目录 。 默认情况下,包含所有子目录。
packages:
# all packages in direct subdirs of packages/
- 'packages/*'
# all packages in subdirs of components/
- 'components/**'
# exclude packages that are inside test directories
- '!**/test/**'
-w
表示在workspace根目录运行命令
pnpm install react react-dom -w
# pnpm 安装全局共用的包,-w表示把包安装在 root 下
-r
表示在工作区的每个项目中运行命令
pnpm i dayjs -r --filter @test/web
-F,--filter <package_name>
过滤允许您将命令限制于包的特定子集。
通过--filter
pnpm i axios --filter hello-world
直接进入子项目录进行安装
cd hello-world
pnpm i axios
pnpm run start --filter packageA
├── packages
│ ├── ui
│ ├── utils
│ └── web
通过配置各子项package.json
的name
和main
,来声明对应的包名和入口文件。(@test/ui
@test/utils
@test/web
)
安装
pnpm i @test/utils -r --filter @test/ui
# 表示在@test/ui子项中安装@test/utils这个包
使用
import {add} from '@test/utils'
以使用pnpm
为例
package.json
{
"scripts": {
"preinstall": "npx only-allow pnpm"
}
}