我们正在为我工作的公司建立一个新网站,该网站由React使用CRA编写。浏览器推送通知和PWA都需要,因此服务人员是必不可少的,但是我相信服务人员应对一些相当大的缓存问题负责。
该网站尚未投入生产,但是我昨天添加了一个新页面(这已经发生了几次),并且一旦部署到我们的开发环境中,办公室中的任何人都无法访问它-他们只是被重定向到了主页(好像该路由不存在),直到他们清除了缓存,然后该路由才加载成功。
我已经阅读了一些有关语义版本的知识,但是所有文章似乎都使用NPM而不是yarn,并且使用npm版本补丁等在本地进行了版本化(这对由8人组成的项目团队而言并不理想)。
我们使用MS Azure作为构建和发布管道,我认为如果需要的话,这将是设置版本的最佳位置。
我的问题是要解决这个问题的步骤是什么,我是否认为版本控制可以缓解?
答案 0 :(得分:2)
在这种情况下,语义版本化没有任何意义,您一直在阅读有关发布到NPM以便全世界使用的软件包(库,框架)的信息。在CRA项目和大多数其他Web项目中,构建工具会根据其内容命名文件,从而对应用进行版本控制。文件名包括内容的哈希值,并在内容更改时自动进行版本控制,例如。 app.iue9234980s.js变为app.92384oujiuoisdf.js等。
-
如果您使用的是CRA提供的 default Service Worker设置,则应查看src / serviceWorker.js。在该文件的注释中说
// 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 subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
这里发生的是,软件和构建过程使用配置为使用预缓存策略的Workbox软件库。在此策略中,即使有可用的新版本,用户也可以从浏览器的缓存中获取以前缓存的最新版本,然后在后台SW更新缓存,并在另一次访问时获得新版本。当然,这意味着用户可能始终是一个“后期”版本。
如果这种行为不是您想要的,那么您需要更改src / serviceWorker.js以及CRA文件中某处的某些配置。例如,您应该在Google上搜索“ cra的定制服务人员”之类的东西。
为了更好地掌握正在发生的事情-特别是在不同配置的情况下正确和预期的行为-我真的建议(每个人)阅读Google关于软件自身的入门知识,https://developers.google.com/web/fundamentals/primers/service-workers 了解SW的基本原理之后,检出Workbox库https://developers.google.com/web/tools/workbox可能会很有用,以了解它可以为您的应用程序提供什么。
在这里阅读和理解SW的各个方面非常关键-用SW脚踩脚是非常容易的:)