yarn 迁移 pnpm

254 阅读2分钟

为什么迁移?

请在互联网检索相关资料,了解 pnpm 和 yarn 的区别,以及 pnpm 的优势。

另 npm 迁移 pnpm 也通用

迁移步骤

1. 创建 .npmrc 配置文件

根目录创建创建 .npmrc 配置文件,添加如下配置:

auto-install-peers=true

用以解决 package.json 引用的依赖无法解析的问题

2. 创建lock文件

运行如下命令,生成 lock 文件。

pnpm import pnpm-lock.yaml

该命令从另一个包管理器的lock文件生成pnpm-lock.yaml文件, 支持如下包管理器lock文件:

  • package-lock.json
  • npm-shrinkwrap.json
  • yarn.lock

3. 移除遗留文件

  1. 移除 yarn.lock 文件
  2. 移除 node_modules 文件夹

4. 安装依赖

pnpm install

5. 修改 package.json 文件

修改 package.json 文件中的 scripts 字段,将 yarn 替换为 pnpm

同时指定 包管理器版本 与 限制包管理器初始化为 pnpm

// package,json
{
   "name": "project-name",
   "version": "0.1.0",
    // 包管理器版本
   "packageManager": "pnpm@9.7.1",
   "scripts": {
    // 限制包管理器初始化 pnpm
    "preinstall": "npx only-allow pnpm"
  },
}

6. link

pnpm 的 link 命令需要 --global 参数

 # 在你要链接的本地包目录中运行以下命令,将包链接到全局环境中
 pnpm link --global 

在其他项目 引用已 link 的包时也需要指定 --global 参数

# 在你要使用该包的目标项目中运行以下命令,将全局链接的包链接到本地项目中
pnpm link --global example-project-name

注意事项

  1. pnpm 不会安装依赖的 peerDependencies,需要手动安装,或者在 .npmrc 文件中添加 auto-install-peers=true 配置。
  2. 如果隐式引用了某个依赖包的依赖,但是没有在 package.json 文件中显式引用,可能会导致依赖无法解析的问题。需要手动添加。例如引用了 Element-plus 中的 dayjs 依赖,但是没有在 package.json 文件中显式引用 dayjs 依赖。
  3. 有些依赖可能不支持 pnpm,需要手动安装。