跳到主要内容

旧的nextjs或expo项目改用pnpm管理包

Next.js项目

官方支持

Next.js 15 完全支持 pnpm。

从 yarn 迁移到 pnpm 的步骤

  1. 删除原有的依赖文件:
rm -rf node_modules
rm yarn.lock
  1. 安装 pnpm (如果还没安装):
npm install -g pnpm
  1. 将 package.json 中的 packageManager 字段更新为 pnpm:
{
"packageManager": "pnpm@8.x" //版本号必须写全
}

建议取消这项。

  1. 使用 pnpm 重新安装依赖:
pnpm install
  1. 如果项目中有 .npmrc 文件,需确保兼容 pnpm,添加以下配置:
node-linker=hoisted
shamefully-hoist=true

注意事项:

  • 检查 .gitignore 是否包含 .pnpm-store/
  • 更新 CI/CD 配置文件中的包管理器命令
  • 如果使用 Dockerfile,更新相关命令从 yarn 到 pnpm
  • 检查项目中的脚本命令,将 yarn 相关命令替换为 pnpm

一些常用命令对照:

yarn -> pnpm
yarn add -> pnpm add
yarn remove -> pnpm remove
yarn run -> pnpm run

以上内容来自AI总结。

Expo项目

如果是一个之前的expo项目呢,用的yarn,现在想改用pnpm? 以下是AI回答(Claude-3.5-Sonnet,截至 2024 年 10 月 22 日的最新模型):

从 yarn 迁移到 pnpm 的步骤

对于 Expo 项目从 yarn 迁移到 pnpm,步骤略有不同,因为需要特别注意 Expo 的特定配置:

  1. 首先清理现有依赖:
rm -rf node_modules
rm yarn.lock
  1. 在项目根目录创建或修改 .npmrc 文件,添加以下配置:
node-linker=hoisted
shamefully-hoist=true
auto-install-peers=true
  1. 修改 package.json,添加 packageManager 字段:
{
"packageManager": "pnpm@8.x"
}
  1. 使用 pnpm 重新安装依赖:
pnpm install
  1. 更新 Expo 相关脚本,在 package.json 中:
{
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
}
}

特别注意事项:

  1. Expo 依赖处理:
  • 确保 expo-cli 正确安装:pnpm add -g expo-cli
  • 如果使用 EAS(Expo Application Services),更新 eas-cli:pnpm add -g eas-cli
  1. 常见问题解决:
  • 如果遇到模块解析问题,可能需要在 .npmrc 中添加:
public-hoist-pattern[]=*expo*
public-hoist-pattern[]=@expo*
  1. Expo 开发工具的命令对照:
yarn start -> pnpm start
yarn ios -> pnpm ios
yarn android -> pnpm android
yarn web -> pnpm web
expo doctor -> pnpm exec expo doctor
  1. 如果使用 EAS build,更新 eas.json 中的缓存配置:
{
"build": {
"development": {
"cache": {
"paths": [
"~/.pnpm-store"
]
}
}
}
}
  1. 如果项目使用了 React Native 原生模块,可能需要重新运行:
pnpm exec expo prebuild

官方支持情况

Expo官方对pnpm的支持状态如下:

  1. 现状:
  • Expo官方主要支持yarn和npm
  • pnpm的支持是实验性的,不是官方优先推荐的包管理器
  • 某些Expo功能可能在使用pnpm时出现兼容性问题
  1. 已知问题:
  • expo-development-client在使用pnpm时可能有链接问题
  • 某些原生模块的自动链接可能不正常
  • prebuild命令可能需要额外配置
  • 某些expo插件可能无法正确解析依赖关系
  1. 官方建议:
  • 对于新项目,推荐使用yarn或npm
  • 如果一定要使用pnpm,建议:
    • 使用最新版本的expo和pnpm
    • 确保正确配置.npmrc
    • 做好充分测试,特别是原生功能
  1. 替代建议:
  • 如果项目不复杂,建议继续使用yarn
  • 如果团队确实需要使用pnpm:
    • 可以考虑等待Expo官方更好的pnpm支持
    • 或在非原生功能的项目中使用pnpm
    • 做好版本管理和回退方案

总的来说,虽然技术上可以使用pnpm管理Expo项目,但由于官方支持有限,建议在生产环境中谨慎使用。