如何从 yarn / npm 迁移到 pnpm

2025-05-25

如何从 yarn / npm 迁移到 pnpm

动机

pnpm在获取、解析和存储依赖项方面性能更佳。我个人经验表明,在某些项目中,pnpm解析依赖项的速度可以提高约 10 倍,磁盘使用效率可以提高 3 倍。

如果您以前pnpm使用过,那么它也很容易开始使用,因为 CLI 非常相似。npmyarn

https://pnpm.io/motivation

迁移指南

步骤 1:安装pnpm 步骤
2:删除node_modules

npx npkill
Enter fullscreen mode Exit fullscreen mode

步骤 3:添加到package.json

"scripts": {
  "preinstall": "npx only-allow pnpm", 
  ...
}
Enter fullscreen mode Exit fullscreen mode

这将防止其他开发人员意外安装除以下之外的依赖项pnpm

步骤 4:创建pnpm-workspace.yaml

packages:
  # include packages in subfolders (e.g. apps/ and packages/)
  - "apps/**"
  - 'packages/**'
  # if required, exclude some directories
  - '!**/test/**'
Enter fullscreen mode Exit fullscreen mode

步骤 4 (a)"workspaces"从中删除"package.json",因为不再需要它。

步骤5:运行

pnpm import
Enter fullscreen mode Exit fullscreen mode

此命令将pnpm-lock.yaml基于yarn.lock(或packages-lock.json
步骤 6:删除yarn.lock(或packages-lock.json
步骤 7:安装依赖项创建一个文件

pnpm i
Enter fullscreen mode Exit fullscreen mode

步骤 8在所有文件和其他文件中将npm run(或yarn)替换为(例如,代替pnpmpackage.jsonpnpm testnpm run test

重要!你需要记住pnpm不要使用依赖提升:

使用 npm 或 Yarn Classic 安装依赖项时,所有包都会被提升到模块目录的根目录。因此,源代码可以访问未添加到项目依赖项的依赖项。
默认情况下,pnpm 使用符号链接仅将项目的直接依赖项添加到模块目录的根目录中
。pnpm

实际上,这意味着如果您有一个A导入包Bimport something from 'B')但没有Bdependencies或中明确指定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
文章来源:https://dev.to/andreychernykh/yarn-npm-to-pnpm-migration-guide-2n04
PREV
我希望在开始我的计算机科学专业时就知道编程职业的四件事
NEXT
如何摆脱(或完全避免)教程陷阱