pnpm
pnpm install
// 安装 axios
pnpm install axios
// 安装 axios 并将 axios 添加至 devDependencies
pnpm install axios -D
// 安装 axios 并将 axios 添加至 dependencies
pnpm install axios -S
别名 -- i
pnpm uninstall
pnpm uninstall axios --filter <packageName>
uninstall -- 别名 rm un
pnpm link
将本地项目连接到另一个项目。注意,使用的是硬链接,而不是软链接。如
pnpm link ../../axios
另外,对于我们经常用到npm run/start/test/publish,这些直接换成 pnpm 也是一样的,不再赘述。更多的使用姿势可参考官方文档: pnpm.js.org/en/
入门demo
开始撸😁
mkdir monorepo-demo
pnpm init
这里我对内容做了一点修改,package.json的内容如下:
{
"name": "monorepo-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"type": "module",
"keywords": [],
"author": "ywanzhou",
"license": "MIT"
}
这里我主要添加了一个type字段,这里我使用ESModule模块化规范。最好所有得package.json 都统一
packages:
- 'packages/ **'
现在我们就可以在packages中创建多个项目了,目录结构如下:
monorepo-demo
├── package.json
├── packages
│ ├── components
│ │ ├── index.js
│ │ └── package.json
│ ├── core
│ │ ├── index.js
│ │ └── package.json
│ ├── utils
│ │ ├── index.js
│ │ └── package.json
├── pnpm-lock.yaml
└── pnpm-workspace.yaml
{
"name": "@monorepo/components",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"type": "module",
"license": "ISC",
"dependencies": {
"lodash": "^4.17.21",
"@packages/utils": "workspace:^1.0.0"
}
}
剩余的两个名称分别为@monorepo/core和@monorepo/utils。
我们如果在根目录下安装依赖的话,这个依赖可以在所有的packages中使用,如果我们需要为具体的一个package安装依赖怎么办?
cd到package的所在目录嘛?漏,大漏特漏,我们可以通过下面这个命令:
pnpm --filter <package_selector> <command>
Ex: pnpm --filter @monorepo/components add lodash
-F等价于--filter
现在我们在往@monorepo/utils中安装一个dayjs,命令如下
pnpm --filter @monorepo/utils add dayjs
packageA中引用packageB
现在我们就来实现package间的相互引用,首先我们在@monorepo/utils/index.js中写入如下内容:
import dayjs from 'dayjs'
export function format(time, f = 'YYYY-MM-DD') {
return dayjs(time).format(f)
}
然后我们执行如下命令:
pnpm -F @packages/components add @packages/utils@*
这个命令表示在@monorepo/components安装@monorepo/utils,其中的@*表示默认同步最新版本,省去每次都要同步最新版本的问题。
安装完成后@monorepo/components/package.json内容如下:
{
"name": "@packages/components",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"type": "module",
"license": "ISC",
"dependencies": {
"@packages/utils": "workspace: *",
"lodash": "^4.17.21"
}
}
然后我们在@monorepo/components/index.js写入如下内容:
import { format } from '@packages/utils'
console.log(format(new Date()))
然后我们在项目根目录运行如下命令
node packages/components
即可打印出当前的日期。