动机
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