在这种情况下语义版本控制没有任何意义,您很可能一直在阅读有关发布到 NPM 供全世界使用的包(库、框架)的信息。在 CRA 项目和大多数其他 Web 项目中,您的应用程序的版本控制由构建工具在它们根据内容命名文件时发生。文件名包括内容的哈希值,并在内容更改时自动进行版本控制,例如。app.iue9234980s.js 变成 app.92384oujiuoisdf.js 等。
——
如果您使用的是 CRA 提供的默认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.
此处发生的是 SW 和构建过程使用配置为使用预缓存策略的 Workbox SW 库。在此策略中,即使有新版本可用,用户也会从浏览器缓存中获取先前缓存的最后一个版本,然后在后台软件更新缓存,并在再次访问时用户获取更新版本。这当然意味着用户可能总是“迟到”一个版本。
如果这种行为不是您想要的,那么您需要更改 src/serviceWorker.js 以及 CRA 文件中某处的一些配置。您应该在谷歌上搜索诸如“带有 cra 的自定义服务人员”之类的内容。
为了更好地了解正在发生的事情——尤其是在不同配置的情况下什么是正确的和预期的行为——我真的建议(每个人)阅读谷歌关于软件本身的入门,这里:https : //developers.google.com/web/fundamentals/
入门/服务工作者了解软件的基本原则后,检查 Workbox 库https://developers.google.com/web/tools/workbox以查看它可以为您的应用程序提供什么可能会很有用。
阅读和理解 SW 的不同方面是这里的关键——用 SWs 用脚射击自己是极其容易的 :)