【发布时间】:2018-05-20 09:48:28
【问题描述】:
ES6 模块允许我们像这样创建一个入口点:
// main.js
import foo from 'foo';
foo()
<script src="scripts/main.js" type="module"></script>
foo.js 将存储在浏览器缓存中。在我将 foo.js 的新版本推向生产之前,这是可取的。
通常的做法是添加具有唯一 id 的查询字符串参数以强制浏览器获取新版本的 js 文件 (foo.js?cb=1234)
如何使用 es6 模块模式实现这一点?
【问题讨论】:
-
真棒的问题!终于找到了一个道理。只是谢谢你的提问!我对所有那些花哨的 ES 模块的主要担心是缓存破坏。每次网站更新时,它都会在竞争条件下失败。我喜欢 CommonJS 的动态导入:
const a = require(b ? 'm1' : 'm2')。import a from (b ? 'm1' :'m2')不行。 -
您是否设法为此@spinners 找到解决方案?我也有同样的问题!
-
您找到解决方案了吗?这个问题目前对我来说是一个重大问题,我很惊讶这似乎是网络上唯一关于它的问题。我已经求助于在我的 Javascript 文件中的每个导入语句的末尾添加“?v=x.x.x”。所以我有 'import foo from 'foo?v=1.x.x';对于我所有的模块。这是一个非常烦人的解决方案,因为这意味着我在每个版本中都修改了源代码控制中的数百个文件,只是因为我必须修改版本号,即使文件中的实际代码没有更改。非常感谢任何信息。
-
^^ 这就是我最终做的事情
-
2020年还有没有更好的办法?我阅读了建议 Etag 的答案,它很优雅,但并不总是可以配置服务器。
标签: web browser-cache es6-modules