看到各种开源项目从 yarn 迁移到 pnpm,心血来潮也想来尝试一下 pnpm 这款被吹爆的包管理工具。
项目之前使用的 yarn,需要将其 lock 文件转换一下。查阅文档 pnpm 提供了相应命令,直接使用就完事,nice。
▶ pnpm import
/.../
完事后会生成 'pnpm-lock.yaml' 文件
├── package.json
└── pnpm-lock.yaml
删除所有 node_modules 文件执行 pnpm install 重新安装依赖。
启动项目,然后一大堆报错,"Can't resolve 'xxx' in 'xxxx''。
研究文档发现,yarn 和 npm 会将所有依赖平铺在 node_modules,在项目中可以访问任何依赖的包。默认配置的 pnpm 创建 node_modules 时不会平铺依赖,我们需要将依赖提升至node_modules根目录。
创建 '.npmrc' 文件
shamefully-hoist=true
此配置将所有内容提升到node_modules的根目录,如果明确知道需要提升的包名,可以按如下设置
public-hoist-pattern[]=moment
public-hoist-pattern[]=@umijs/*
public-hoist-pattern[]=antd
public-hoist-pattern[]=umi-request