你知道是否有一个框架可以添加requirejs加载的脚本的本地存储缓存?我一直在尝试让它自己工作,但后备路径功能本身就很难实现。
这就是我所拥有的,并且它不适用于那些使用相对模块引用的文件。
// Inspired by https://github.com/andrewwakeling/requirejs-basketjs/blob/master/basket-loader.js
(function (rjs) {
rjs.load = function (context, moduleName, url) {
var storage = window.localStorage;
var hash = computeHash(moduleName);
var key = 's' + hash;
console.log(url);
if (storage && storage[key] !== undefined) {
complete(context, moduleName, storage[key]);
}
fetch(context, moduleName, url);
}
function complete(context, moduleName, data) {
var hash = computeHash(moduleName);
var node = document.getElementById('rjs-mod-' + hash);
if (!node) {
node = document.createElement('script');
node.id = 'rjs-mod-' + hash;
node.type = 'text/javascript';
node.charset = 'utf-8';
node.defer = true;
node.text = data;
document.head.appendChild(node);
}
window.setTimeout(function() {
context.completeLoad(moduleName);
}, 0);
}
function fetch(context, moduleName, url) {
var hash = computeHash(moduleName);
var tmp = complete;
// alas, hackish...
$.get(url).done(function (data) {
window.localStorage['s' + hash] = data;
tmp(context, moduleName, data);
}).fail(function (err) {
// fallback ...
context.onError(err);
});
}
function computeHash(moduleName) {
var pos = moduleName.lastIndexOf('/');
if (pos !== -1)
moduleName = moduleName.substr(pos, 1);
return moduleName.hashCode();
}
} (requirejs));
所以我的问题不是关于修改我的代码的人,而是你们知道一个框架,它将requirejs封装在本地存储功能中!
答案 0 :(得分:1)
我在Twitter上问James Burke,这是他的回复:
@parmaeldo并非我的头脑,但听说过它。覆盖requirejs.load来执行此操作。或者,如果网站有选项,请使用appcache
- James Burke(@jrburke)31 januari 2015