如何从 yarn / npm 迁移到 pnpm
动机
pnpm
在获取、解析和存储依赖项方面性能更佳。我个人经验表明,在某些项目中,pnpm
解析依赖项的速度可以提高约 10 倍,磁盘使用效率可以提高 3 倍。
如果您以前pnpm
使用过,那么它也很容易开始使用,因为 CLI 非常相似。npm
yarn
迁移指南
步骤 1:安装pnpm
步骤
2:删除node_modules
npx npkill
步骤 3:添加到package.json
"scripts": {
"preinstall": "npx only-allow pnpm",
...
}
这将防止其他开发人员意外安装除以下之外的依赖项pnpm
步骤 4:创建pnpm-workspace.yaml
packages:
# include packages in subfolders (e.g. apps/ and packages/)
- "apps/**"
- 'packages/**'
# if required, exclude some directories
- '!**/test/**'
步骤 4 (a):"workspaces"
从中删除"package.json"
,因为不再需要它。
步骤5:运行
pnpm import
此命令将pnpm-lock.yaml
基于yarn.lock
(或packages-lock.json
)
步骤 6:删除yarn.lock
(或packages-lock.json
)
步骤 7:安装依赖项创建一个文件
pnpm i
步骤 8:在所有文件和其他文件中将npm run
(或yarn
)替换为(例如,代替)pnpm
package.json
pnpm test
npm run test
重要!你需要记住pnpm
不要使用依赖提升:
使用 npm 或 Yarn Classic 安装依赖项时,所有包都会被提升到模块目录的根目录。因此,源代码可以访问未添加到项目依赖项的依赖项。
默认情况下,pnpm 使用符号链接仅将项目的直接依赖项添加到模块目录的根目录中
。pnpm
实际上,这意味着如果您有一个A
导入包B
(import something from 'B'
)但没有B
在dependencies
或中明确指定devDependencies
,那么执行将失败。
备忘单
表格 | 命令 | 凉爽的 |
---|---|---|
安装依赖项 | pnpm i |
https://pnpm.io/cli/install |
添加依赖项 | pnpm add <package> |
https://pnpm.io/cli/add |
显示依赖于指定包的所有包 | pnpm why <package> |
https://pnpm.io/cli/why |
运行命令,就像它是从项目根目录而不是工作区包执行的一样 | 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 |