使用RequireJS缓存破坏特定模块

imr*_*ane 9 javascript caching browser-cache node.js requirejs

这个问题已被多次询问,但并不是这个例子的具体问题.

以下是我们的应用程序概述:

  • 使用Express on Node进行简单的服务器路由
  • 单页骨干应用程序
  • 核心模块和库(JS/CSS)不会改变
  • 经常更改的Widget JS/LESS/HTML文件

在开发过程中,我希望缓存更改胸部文件而不是那些核心库,以加快我的页面重新加载并加快我的开发.

我找到了解释:

  1. 禁用RequireJS上的缓存 - 在这里
  2. Cache-Busting Specific Modules的解释 - 这里

可以解决方案:

  1. 解释requireJS缓存破坏是如何工作的?
  2. 为此特定方案提供解决方案.

c24*_*24w 4

缓存清除的工作原理是在每个所需文件的末尾附加一个始终唯一的查询字符串。它利用了 RequireJS 的urlArgs配置值;RequireJS 会为你添加它:

urlArgs: "bust=" + (new Date()).getTime()
Run Code Online (Sandbox Code Playgroud)

(new Date()).getTime()部分只是从 JavaScript 中获取唯一字符串的简单方法。您可以对 做一些变化Math.random(),但使用自纪元以来的毫秒数可以保证唯一性,以实现最佳的缓存清除。

我认为伯克先生的建议是这样的:

require.config({
    baseUrl: '/base/path',
    paths: {
        'fileAlias': 'fileLikelyToChange?bust=' + (new Date()).getTime(),
        'anotherFileAlias': 'anotherFileLikelyToChange?bust=' + (new Date()).getTime(),
        'jQuery': 'jQuery'
    },
});
Run Code Online (Sandbox Code Playgroud)

因此,urlArgs您可以将其专门应用于每个可能更改的文件,而不是无处不在的缓存清除;因此,排除任何库。

我还没有测试过,但我可能会将其整理为以下内容:

function bust(path) {
    return path + '?bust=' + (new Date()).getTime();
}

require.config({
    baseUrl: '/base/path',
    paths: {
        'fileAlias': bust('fileLikelyToChange'),
        'anotherFileAlias': bust('anotherFileLikelyToChange'),
        'jQuery': 'jQuery'
    },
});
Run Code Online (Sandbox Code Playgroud)