要求 js 缓存设置 urlArgs 半身像的设置文件
Require js caches the setup file which sets up the urlArgs bust
我有一个 knockout/require 应用程序,并且正在努力处理一个特定文件的缓存。遗憾的是,正是该文件破坏了所有其他 javascript 文件的缓存。设置可能有点奇怪:
每个视图都简单地绑定了一个淘汰的视图模型。它需要系统特定区域的需求库和主脚本:
<script data-main="scripts/user" src="~/Scripts/lib/require.js"></script>
上面需要的scripts/user.js文件需要通用文件(包含require设置)和主viewmodel脚本:
require(['./Common'], function (common) {
require(['userMain']);
})
scripts/user/userMain.js 文件绑定视图模型并需要视图级别所需的任何内容(例如自定义绑定处理程序)。
define(function (require) {
require(['ko', 'userViewModel'], function (ko, userViewModel) {
var userVm = new userViewModel(false);
userVm.initialise();
// bound to the wrapper to stop jquery dialog bindings being applied twice
ko.applyBindings(userVm, document.getElementById('pageWrapper'));
});
});
那么我们有common.js:
require.config({
baseUrl: './',
paths: {
'userMain': './Scripts/user/Main',
'userAjax': './Scripts/user/userAjax',
'userBasicDetails': './Scripts/user/userBasicDetails',
'userExchangesModel': './Scripts/user/userExchangesModel',
'userModel': './Scripts/user/userModel',
'userReportAccessModel': './Scripts/user/userReportAccessModel',
'usersModel': './Scripts/user/usersModel',
'userViewModel': './scripts/user/userViewModel',
... etc
,
urlArgs: "bust=" + (new Date()).getTime()
文件夹中的每个脚本都需要在其自己的模型中需要的任何内容。
脚本结构设置如下:
scripts\common.js
scripts\user.js
scripts\user\main.js
scripts\user\userAjax
scripts\user\etc...
此设置允许我从其他文件夹引用脚本,而无需指定文件位于 common.js 以外的任何位置。缺点是所有 js 文件都有一个共同的引用,但我可以接受。
例如,有 4 或 5 个文件夹与 'user'('scripts\report\'、'scripts\client' 等)处于同一级别,如果我想创建
来自这些文件夹中任何脚本的用户模型我可以简单地 "define (['userModel'], function (userModel)" 并且 common 会告诉 require 去哪里找到那个文件。这个系统运行良好,允许我随意移动文件并且只在一个地方改变它们的路径。
当我在 common.js 中添加新脚本或更改路径时出现问题。由于设置,所有其他人都破坏了每个请求
通常,公共文件本身会被缓存,因此我必须在获取新的 common.js 文件之前破坏用户的 chrome 缓存。这显然是交付时的一个大问题 - 页面失败,因为它们找不到新脚本,因为它不存在于同一个文件夹中并且 common 已被缓存。
任何人都可以建议一种自动破坏 common.js 或将路径配置移动到单独的必需文件中的方法,以便 urlArgs 破坏会为我完成吗?
非常感谢。
在加载RequireJS的script
元素之前,添加如下代码:
<script>
require = {
urlArgs: "bust=" + (new Date()).getTime()
};
</script>
RequireJS 将选择它作为它的初始配置,并且 它加载的任何 模块,通过 data-main
或任何其他方式,将需要 bust
范围。
最好从您对 require.config
的后续调用中删除 urlArgs
。它将覆盖较早的选项,因此 bust
的值将更改。通常,模块被 RequireJS 加载一次且仅加载一次,因此 不应该 不会发生同一模块由具有两个不同 bust
值的同一页面加载的情况。但是有些情况我不确定(例如,使用 require.undef
取消定义模块)。删除后面的 urlArgs
会避免意外。
我有一个 knockout/require 应用程序,并且正在努力处理一个特定文件的缓存。遗憾的是,正是该文件破坏了所有其他 javascript 文件的缓存。设置可能有点奇怪:
每个视图都简单地绑定了一个淘汰的视图模型。它需要系统特定区域的需求库和主脚本:
<script data-main="scripts/user" src="~/Scripts/lib/require.js"></script>
上面需要的scripts/user.js文件需要通用文件(包含require设置)和主viewmodel脚本:
require(['./Common'], function (common) {
require(['userMain']);
})
scripts/user/userMain.js 文件绑定视图模型并需要视图级别所需的任何内容(例如自定义绑定处理程序)。
define(function (require) {
require(['ko', 'userViewModel'], function (ko, userViewModel) {
var userVm = new userViewModel(false);
userVm.initialise();
// bound to the wrapper to stop jquery dialog bindings being applied twice
ko.applyBindings(userVm, document.getElementById('pageWrapper'));
});
});
那么我们有common.js:
require.config({
baseUrl: './',
paths: {
'userMain': './Scripts/user/Main',
'userAjax': './Scripts/user/userAjax',
'userBasicDetails': './Scripts/user/userBasicDetails',
'userExchangesModel': './Scripts/user/userExchangesModel',
'userModel': './Scripts/user/userModel',
'userReportAccessModel': './Scripts/user/userReportAccessModel',
'usersModel': './Scripts/user/usersModel',
'userViewModel': './scripts/user/userViewModel',
... etc
,
urlArgs: "bust=" + (new Date()).getTime()
文件夹中的每个脚本都需要在其自己的模型中需要的任何内容。
脚本结构设置如下:
scripts\common.js
scripts\user.js
scripts\user\main.js
scripts\user\userAjax
scripts\user\etc...
此设置允许我从其他文件夹引用脚本,而无需指定文件位于 common.js 以外的任何位置。缺点是所有 js 文件都有一个共同的引用,但我可以接受。 例如,有 4 或 5 个文件夹与 'user'('scripts\report\'、'scripts\client' 等)处于同一级别,如果我想创建 来自这些文件夹中任何脚本的用户模型我可以简单地 "define (['userModel'], function (userModel)" 并且 common 会告诉 require 去哪里找到那个文件。这个系统运行良好,允许我随意移动文件并且只在一个地方改变它们的路径。
当我在 common.js 中添加新脚本或更改路径时出现问题。由于设置,所有其他人都破坏了每个请求 通常,公共文件本身会被缓存,因此我必须在获取新的 common.js 文件之前破坏用户的 chrome 缓存。这显然是交付时的一个大问题 - 页面失败,因为它们找不到新脚本,因为它不存在于同一个文件夹中并且 common 已被缓存。
任何人都可以建议一种自动破坏 common.js 或将路径配置移动到单独的必需文件中的方法,以便 urlArgs 破坏会为我完成吗?
非常感谢。
在加载RequireJS的script
元素之前,添加如下代码:
<script>
require = {
urlArgs: "bust=" + (new Date()).getTime()
};
</script>
RequireJS 将选择它作为它的初始配置,并且 它加载的任何 模块,通过 data-main
或任何其他方式,将需要 bust
范围。
最好从您对 require.config
的后续调用中删除 urlArgs
。它将覆盖较早的选项,因此 bust
的值将更改。通常,模块被 RequireJS 加载一次且仅加载一次,因此 不应该 不会发生同一模块由具有两个不同 bust
值的同一页面加载的情况。但是有些情况我不确定(例如,使用 require.undef
取消定义模块)。删除后面的 urlArgs
会避免意外。