如何清除React Native缓存?

166

在react-native开发中,构建应用程序时使用了多个缓存:

  1. React Native打包器缓存
  2. 模拟器缓存
  3. Java端缓存(仅适用于Android)
  4. npm缓存(如果适用)

我是否还漏掉了其他内容?因为我正在尝试清除react-native中的缓存,以便能够重复出现仅在第一次使用时出现的错误。但是清除上述缓存并没有帮助我。这是在Android上。当应用程序正在构建时,大多数行都不会显示UP-TO-DATE,因为我已经清除了缓存。

但是,仍然有许多行打印此文本。例如:

app:preBuild UP-TO-DATE

app:preDebugBuild UP-TO-DATE

:app:preReleaseBuild UP-TO-DATE

问题是,如何清除与react-native开发相关的整个缓存?

25个回答

179

对于不使用Expo的React Native Init方法,请使用:

npm start -- --reset-cache

2
这帮助我修复了Error: unknown - Top-Master
2
可以在不启动 Metro Bundler 的情况下完成吗? - MattPark
2
为了更好的效果,在执行此命令之前,请关闭Metro Bundler并运行此命令。 - hakkikonu
9
"--"是什么作用? - kojow7
15
用 "--" 将选项和参数分开。在 "--" 之后的所有内容 npm 都不会将其作为选项读取,而是传递给启动脚本。(大多数 Unix/Linux 命令都遵循这种选项/参数分离的惯例) - Elizandro - SparcBR
显示剩余5条评论

127

最简单的方法(使用React Native、npm和expo)

适用于React Native

react-native start --reset-cache

对于npm

npm start -- --reset-cache
为Expo
expo start -c

8
我收到了 "error: unknown option `--reset-cache'" 的错误提示,我该怎么办? - Leonard
4
@Leonard 请尝试使用 yarn cache clean 命令。 - NineCattoRules

46

清理React Native项目的缓存:

npm < 6.0 和 RN < 0.50:

 watchman watch-del-all && rm -rf $TMPDIR/react-* &&
 rm -rf node_modules/ && npm cache clean && npm install && 
 npm start -- --reset-cache

npm版本≥6.0和RN版本≥0.50:

 watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* &&
 rm -rf $TMPDIR/metro-bundler-cache-* && rm -rf node_modules/ && npm cache clean --force &&
 npm install && npm start -- --reset-cache

2
一旦遇到由于缓存中存在旧代码生成的错误时,这似乎是唯一的可能解决方法。如果在RN代码中调试并使用了一些“console.log”,那真的很痛苦。有没有更短的解决方案,我的意思是避免RN框架使用缓存代码? - Carmine Tambascia
1
一些需要注意的事项。1)并非总是定义了$TMPDIR变量。2)watchman命令并不总是被使用。您可以删除该命令的部分内容,或在其后使用“;”而不是“&&”。3)目录名称可能会有所不同。我的是/tmp/metro-cache/,而不是metro-bundler-cache-something...(RN 0.62)。 - Elizandro - SparcBR
我会说这是最好的解决方案。 - O. Borcuhin

37
目前,它是使用 npx 构建的,所以需要更新。
终端: npx react-native start --reset-cache iOS: Xcode -> Product -> Clean Build Folder Android: Android Studio -> Build -> Clean Project

这对一个遇到问题的Expo(基于React Native)项目有所帮助。 - undefined

29

试试这个

react-native start --reset-cache

22

对于那些使用expo-cli的人

expo start -c


13

这是对我有效的方法:

watchman watch-del-all && rm -f podfile.lock && rm -rf node_modules && yarn && yarn start --reset-cache

14
不需要删除你的 yarn.lock 文件,否则会导致所有依赖项在更新过程中被更新。 - Rob
1
与podfile.lock相同,不应该被删除。 - sooper

12

以下命令适用于我的Android和Yarn环境,

cd android && ./gradlew cleanBuildCache && cd .. &&
watchman watch-del-all && rm -rf node_modules/ &&
rm -rf $TMPDIR/react-native-packager-cache-* &&
rm -rf $TMPDIR/metro-bundler-cache-* &&  
yarn cache clean && yarn install && 
yarn start --reset-cache

7
清除React Native项目缓存:
如果你确定该模块存在,尝试以下步骤:
  1. 清除Watchman监控: npm watchman watch-del-all
  2. 删除node_modules目录: rm -rf node_modules ,然后运行 yarn install 命令
  3. 重置Metro的缓存: yarn start --reset-cache
  4. 删除缓存: rm -rf /tmp/metro-*

4
如果我尝试运行 rm -rf /tmp/metro-*,会出现 zsh: no matches found: /tmp/metro-* 的错误提示。我的RN版本是0.64.1。你有什么想法吗? - Raphael Pinel
似乎转义星号可以解决问题 rm -rf /tmp/metro-\* - Roman Akash

7

以下是一篇在 GitHub 上帮了我很多的好文章,“清除你的 React Native 项目缓存”,作者是Jarret Moses

这里提供了 4 种不同情况下的解决方案:

  1. React Native 版本 <0.50 -
    watchman watch-del-all && rm -rf $TMPDIR/react-* && rm -rf node_modules/ && npm cache clean && npm install && npm start -- --reset-cache

  2. React Native 版本 >=0.50 - watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-* && rm -rf node_modules/ && npm cache clean && npm install && npm start -- --reset-cache

  3. NPM 版本 >=5 - watchman watch-del-all && rm -rf $TMPDIR/react-* && rm -rf node_modules/ && npm cache verify && npm install && npm start -- --reset-cache
  4. Windows 系统 - del %appdata%\Temp\react-native-* & cd android & gradlew clean & cd .. & del node_modules/ & npm cache clean --force & npm install & npm start -- --reset-cache

这些解决方案与Vikram Biwal's Answer中的解决方法类似。

在给定链接下面还有讨论,如果以上 4 种情况都无法解决问题,您可以查看讨论寻找可能的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接