使用 SeedStack 中的 RequireJS 防止 Javascript 文件的浏览器缓存问题
Prevent browser cache issue on Javascript files with RequireJS in SeedStack
使用 SeedStack 14.7 我们在服务器上上传新版本时面临缓存问题:每个用户都必须清除缓存才能获取最新版本的文件。
我尝试在片段 JSON 文件的 requireConfig
部分使用 "urlArgs": "version=2"
。它通过在每个文件上添加参数来完成这项工作,因此我们可以在更改版本时使用它,但它也会影响每个模块配置中的 urls !
当我们使用此配置将 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,这个配置解决了缓存问题,但它也会影响片段中定义的其他模块,所以我需要找到另一个解决方案来防止浏览器缓存文件
模块配置值,如您示例中的 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 个模板的情况下会正常工作。如果您的母版页是由后端自动生成的,那么这是自动完成的。查看 this page 了解详细信息。
使用 SeedStack 14.7 我们在服务器上上传新版本时面临缓存问题:每个用户都必须清除缓存才能获取最新版本的文件。
我尝试在片段 JSON 文件的 requireConfig
部分使用 "urlArgs": "version=2"
。它通过在每个文件上添加参数来完成这项工作,因此我们可以在更改版本时使用它,但它也会影响每个模块配置中的 urls !
当我们使用此配置将 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,这个配置解决了缓存问题,但它也会影响片段中定义的其他模块,所以我需要找到另一个解决方案来防止浏览器缓存文件
模块配置值,如您示例中的 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 个模板的情况下会正常工作。如果您的母版页是由后端自动生成的,那么这是自动完成的。查看 this page 了解详细信息。