使用RequireJS缓存破坏特定模块

20 浏览
0 Comments

使用RequireJS缓存破坏特定模块

这个问题已经被问过几次了,但不针对这个例子。\n以下是我们应用程序的概述:\n

    \n

  • 使用Express在Node上进行简单的服务器路由
  • \n

  • 单页Backbone应用程序
  • \n

  • 核心模块和库(JS/CSS)不改变
  • \n

  • 经常更改的小部件JS/LESS/HTML文件
  • \n

\n在开发过程中,我希望对发生变化的文件进行缓存破坏以加快页面重新加载的速度并加快开发进度,而不会对核心库进行缓存破坏。\n我找到了以下解释:\n

    \n

  1. RequireJS上的缓存破坏-这里
  2. \n

  3. 缓存破坏特定模块的解释-这里
  4. \n

\n这个解决方案是否可以:\n

    \n

  1. 解释RequireJS的缓存破坏是如何工作的?
  2. \n

  3. 为这个特定场景提供一个解决方案。
  4. \n

0
0 Comments

Cache busting specific modules with RequireJS 是一个问题,它的出现原因是为了确保在使用外部脚本时不发送缓存破坏参数到外部服务器。解决方法是使用 $.getScript 替代 require 来确保外部脚本被包含进来。例如,对于一些非 AMD 脚本(例如亚马逊支付),可以使用 getScript 来代替 require。这样做可以避免将缓存破坏参数从 urlArgs 发送到外部服务器。

0
0 Comments

问题的出现原因:

在使用RequireJS时,为了防止缓存的问题,可以通过在每个被引用的文件末尾添加一个唯一的查询字符串来实现缓存破坏。可以利用RequireJS的`urlArgs`配置值来实现自动追加查询字符串。具体做法是将`(new Date()).getTime()`作为查询字符串的一部分,确保每次获取到的字符串都是唯一的。

解决方法:

可以通过在`require.config`的`paths`对象中,对每个可能会发生变化的文件应用特定的缓存破坏策略,而不是使用普遍的`urlArgs`缓存破坏。这样可以排除对库文件的缓存破坏。

具体做法是定义一个`bust`函数,接受文件路径作为参数,然后将路径和查询字符串拼接起来。然后在`require.config`的`paths`对象中使用该函数对每个文件进行缓存破坏的设置。

对于在应用程序中被多次引用但在`require.config`的`paths`对象中没有被引用的文件,目前没有简单的解决方案。除非修改RequireJS的源代码或进行复杂的hack,否则没有其他选项。

0