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

Prevent browser cache issue on Javascript files with RequireJS in SeedStack

本文关键字:文件 浏览器 缓存 问题 Javascript 防止 SeedStack RequireJS      更新时间:2023-09-26

使用SeedStack 14.7时,我们面临一个缓存问题,当在服务器上上传一个新版本:每个用户必须清除他们的缓存,以获得最新版本的文件。

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

当我们使用此配置将REST基本url传递给每个模块时,它会通过向基本url添加参数来中断所有REST请求。

My fragment JSON file:

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

有没有办法在不破坏REST请求的情况下解决缓存问题?

EDIT:它不是防止requires缓存所需脚本的副本。是的,SeedStack使用RequireJS和此配置解决缓存问题,但它也影响在片段中定义的其他模块,所以我需要找到另一个解决方案来防止浏览器缓存文件

模块配置值,如您的示例中的apiUrl,不会被RequireJS触及,除非您显式地对它们调用require.toUrl()。我认为这就是你的情况。为了避免这个问题,您应该总是先进行连接,然后再对完整的结果URL调用require.toUrl()

所以,不要这样做:

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

这样做:

var fullUrl = require.toUrl(config.apiUrl + '/my/resource');
顺便说一下,您可以简单地将应用程序的版本添加到母版页的<html>元素的data-w20-app-version属性中,而不是直接在RequireJS配置中设置版本:

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

这将提供相同的行为,但在$templateCache中的Angular模板中可以正常工作。如果您的母版页是由后端自动生成的,则这是自动完成的。请查看本页了解详情。