首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cache破坏与CRA反应

Cache破坏与CRA反应
EN

Stack Overflow用户
提问于 2018-04-02 03:10:05
回答 5查看 83K关注 0票数 63

当我更新我的网站,运行npm运行构建和上传新的文件到服务器,我仍然在寻找我的网站的旧版本。

没有反应,我可以看到我的网站的新版本与高速缓存破坏。我这样做:

上一档

代码语言:javascript
复制
<link rel="stylesheet" href="/css/styles.css">

新文件

代码语言:javascript
复制
<link rel="stylesheet" href="/css/styles.css?abcde">

我如何做这样的事情或实现缓存破坏与创建反应应用?

在应用程序的GitHub中有很多线程,但是没有人有一个正确的/简单的答案。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-04-02 04:45:19

编辑: v2现在默认禁用服务工作人员。

这个答案只适用于CRA v1

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

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

代码语言:javascript
复制
registerServiceWorker();

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

代码语言:javascript
复制
// 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.

如果你想删除网络工作者,不要仅仅删除这一行。导入取消寄存器,并调用它在您的文件,而不是寄存器。

代码语言:javascript
复制
import { unregister } from './registerServiceWorker';

然后打电话

代码语言:javascript
复制
unregister()

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

票数 58
EN

Stack Overflow用户

发布于 2018-04-16 03:46:15

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

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

您可能希望在服务器端响应头中添加以下内容

代码语言:javascript
复制
"Cache-Control": "no-store, no-cache"

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

代码语言:javascript
复制
"headers": { 
    "/**": { 
        "Cache-Control": "no-store, no-cache" 
    } 
}

我认为以这种方式,您仍然可以保留该服务工作者,并且最新的内容将显示在N+1加载(第二次刷新)上。

希望这能帮上忙。

票数 15
EN

Stack Overflow用户

发布于 2019-05-02 09:37:38

正如前面的一些答案所提到的,无论是服务工作者还是(缺乏)缓存头,在看到你的反应应用程序的旧版本时,都会与你合谋。

当涉及到缓存时,React状态如下

对您的Cache-Control: max-age=31536000资产使用build/static,对其他一切使用Cache-Control: no-cache是一个安全和有效的起点,它确保用户的浏览器将始终检查更新的index.html文件,并将所有build/static文件缓存一年。请注意,您可以在build/static上安全地使用一年到期,因为文件内容散列被嵌入到文件名中。

正如@四方主义所提到的,旧版本的registration app默认为选择退出的服务工作者注册,而较新的版本是opt-in。您可以在官方文件中阅读更多有关这方面的内容。这是一个非常简单的过程,使您的配置与最新的模板,如果您开始从一个旧版本的创建-反应-应用程序,你想要切换到新的行为。

相关问题:

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49604821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档