使用 CRA React 清除缓存

新手上路,请多包涵

当我更新我的网站时,运行 npm run build 并将新文件上传到服务器,我仍然在寻找旧版本的网站。

如果没有 React,我可以看到我的站点的新版本具有缓存清除功能。我这样做:

上一个文件

<link rel="stylesheet" href="/css/styles.css">

新文件

<link rel="stylesheet" href="/css/styles.css?abcde">

我该如何做这样的事情或通过创建反应应用程序来实现缓存破坏?

GitHub 中有很多关于这个的创建反应应用程序的线程,但没有人有一个正确/简单的答案。

原文由 Alfrex92 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

编辑:create-react-app v2 现在默认禁用服务工作者

此答案仅适用于 CRA v1

这可能是因为您的网络工作者。

如果您查看 index.js 文件,您可以看到

registerServiceWorker();

从来没有想过它做了什么?如果我们看一下它从中导入的文件,我们可以看到

// In production, we register a service worker to serve assets from local cache.

// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the "N+1" visit to a page, since previously
// cached resources are updated in the background.

// To learn more about the benefits of this model, read {URL}
// This link also includes instructions on opting out of this behavior.

如果要删除网络工作者,不要只删除该行。导入 unregister 并在您的文件中调用它而不是在寄存器中调用它。

 import { unregister } from './registerServiceWorker';

然后打电话

unregister()

PS 当您取消注册时,至少需要刷新一次才能使其正常工作

原文由 Kerry Gougeon 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在使用 create-react-app (并部署到 heroku)时遇到了同样的问题。它一直显示我的应用程序的旧版本😡。

我发现问题似乎出在浏览器端,它缓存了我的旧 index.html 及其过时的 js 包

您可能希望将以下内容添加到服务器端响应标头

"Cache-Control": "no-store, no-cache"

或者,如果您还使用 heroku create-react-app-buildpack ,请更新 static.json 文件

"headers": {
    "/**": {
        "Cache-Control": "no-store, no-cache"
    }
}

我觉得这样你还能留住那个可怜的service worker😂,最新的内容会在N+1加载时显示(二次刷新)

希望这可以帮助…

原文由 Ryan Chu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进