
动机
pnpm在获取、解析和存储依赖项方面表现更好。我的个人经验表明,在某些项目中pnpm可能约为。解决依赖关系的速度提高了 10 倍,磁盘使用效率提高了 3 倍。
从npm或yarn迁移也很容易。 CLI 也与npm和yarn非常相似
https://pnpm.io/motivation
迁移指南
第 1 步:安装pnpm安装
第 2 步:删除node_modules
npx npkill
第 3 步:添加到package.json
"scripts" : {
"preinstall" : "npx only-allow pnpm" ,
...
} ,
"packageManager" : "pnpm@<whatever pnpm version you're going to use>"
第 4 步:创建pnpm-workspace.yaml
packages : # include packages in subdirs (eg apps/ and components/) - " apps/**" - ' packages/**' # if required, exclude some directories - ' !**/test/**'
第 5 步:运行
pnpm import
此命令将基于yarn.lock (或packages-lock.json )创建一个pnpm-lock.yaml文件
第 6 步:删除yarn.lock (或packages-lock.json )
第 7 步:安装依赖项
pnpm i
第 8 步:将所有package.json和其他文件中的npm run (或yarn )替换为pnpm (例如pnpm test代替npm run test )
要在 monorepo 中的所有工作区运行所有命令,请使用 pnpm pnpm run | pnpm (例如pnpm -r test )
重要的!您需要记住pnpm不使用依赖提升:
使用 npm 或 Yarn Classic 安装依赖项时,所有包都被提升到模块目录的根目录。因此,源代码可以访问未作为依赖项添加到项目的依赖项。
默认情况下,pnpm 使用符号链接仅将项目的直接依赖项添加到模块目录的根目录中。
即插即用
实际上,这意味着如果您有一个包A导入了包B ( import something from 'B'内容)但没有在dependencies项或devDependencies中明确指定B ,那么执行将失败。
备忘单
| 表 | 命令 | 凉爽的 |
|---|---|---|
| 安装依赖项 | pnpm i |
https://pnpm.io/cli/install |
| 添加依赖项 | pnpm add <package> |
https://pnpm.io/cli/add |
| 显示依赖于指定包的所有包 | pnpm why <package> |
https://pnpm.io/cli/为什么 |
| 运行命令,就好像它是从项目的根目录而不是工作区包执行的一样 | pnpm -w <command> |
https://pnpm.io/pnpm-cli#-w—workspace-root |
| 将命令限制为特定的包子集 | pnpm --filter <package_selector> <command> |
https://pnpm.io/filtering |
| 这会从每个包的“脚本”对象运行任意命令 | pnpm -r <command> |
https://pnpm.io/cli/run#–recursive–r |
原文: https://dev.to/andreychernykh/yarn-npm-to-pnpm-migration-guide-2n04