使用SeedStack中的RequireJS防止Javascript文件上的浏览器缓存问题

时间:2015-08-19 09:29:30

标签: javascript caching seedstack

使用SeedStack 14.7,我们在服务器上上传新版本时遇到缓存问题:每个用户都必须清除缓存以获取最新版本的文件。

我尝试在片段JSON文件的"urlArgs": "version=2"部分中使用requireConfig。它通过在每个文件上添加参数来完成工作,因此我们可以在更改版本时使用它,但它也会影响每个模块的配置中的URL!

由于我们使用此配置将REST基本URL传递给每个模块,因此它会通过将参数添加到基本URL来中断所有REST请求。

我的片段JSON文件:

{
    "id": "mac2-portail",
    "modules": {
        "gestionImage": {
            "path": "{mac2-portail}/modules/gestionImage",
            "autoload": true,
            "config": {
                "apiUrl": "muserver/rest"
            }
        }
    },
    "i18n": {...},
    "routes": {...},
    "requireConfig": {
        "urlArgs": "version=2",
        "shim": {...}
    }
}

在不破坏REST请求的情况下解决缓存问题的想法是什么?

编辑:它不是Prevent RequireJS from Caching Required Scripts的副本。是的SeedStack使用RequireJS,这个配置解决了缓存问题,但它也影响了片段中定义的其他模块,所以我需要找到另一个解决方案来阻止浏览器缓存文件

1 个答案:

答案 0 :(得分:3)

除非您明确地对它们调用apiUrl,否则RequireJS不会触及模块配置值,例如示例中的require.toUrl()。我认为这就是你的情况。要避免此问题,您应始终先进行连接,然后再在完整的结果URL上调用require.toUrl()

所以,而不是做:

var fullUrl = require.toUrl(config.apiUrl) + '/my/resource';

这样做:

var fullUrl = require.toUrl(config.apiUrl + '/my/resource');

顺便说一下,您可以直接将应用程序的版本添加到母版页的data-w20-app-version元素上的<html>属性中,而不是直接在RequireJS配置中设置版本:

<html data-w20-app data-w20-app-version="2.0.0">

这将提供相同的行为,但在$templateCache中的Angular模板的情况下将正常工作。如果您的母版页由后端自动生成,则会自动完成。查看this page了解详细信息。