Aus*_*tin 29 javascript cdn requirejs
在我的骨干应用程序中,我需要为每个所需文件提供一个后备,如果提供它们的CDN失败.
我试过require.onError像这样覆盖:
require.onError = function (err) {
if (err.requireType === 'timeout') {
var url = err.requireModules;
if (!!~url.indexOf("jquery/"))
console.warn("CDN timed out, falling back to local jQuery.js")
require(["libs/jquery"]);
return;
if (!!~url.indexOf("jqueryui/"))
console.warn("CDN timed out, falling back to local jQueryUI.js")
require(["libs/jqueryui"]);
return;
if (!!~url.indexOf("underscore"))
console.warn("CDN timed out, falling back to local underscore.js")
require(["libs/underscore"]);
return;
if (!!~url.indexOf("backbone"))
console.warn("CDN timed out, falling back to local backbone.js")
require(["libs/backbone"]);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这将异步加载回退文件.我需要按顺序加载这些文件,就像我使用order!插件的原始require语句一样.
使用被覆盖的onError:当CDN无法加载时,后备加载开始,但不等待.这提出了一个问题,因为脚本是根据它们的依赖性来加载的.以下是我原来的require陈述,取决于CDN:
require([
"order!http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
"order!http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js",
"order!http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
"order!http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js",
"order!utils/date",
"order!core/core",
"order!core/errors",
"order!core/constants"
], function() {
...
}
Run Code Online (Sandbox Code Playgroud)
num*_*407 58
您使用的是什么版本的RequireJS?您似乎可能希望将jQuery的回退配置为配置中的路径,然后将jQuery设置为对需要它的其他模块的依赖.如果你使用〜> 2.0,那就像(未经测试):
// in your requirejs config
requirejs.config({
//To get timely, correct error triggers in IE, force a define/shim exports
// check.
enforceDefine: true,
paths: {
jquery: [
'http://somecdn.com/jquery.min', // your cdn
'lib/jquery' // your fallback
],
jqueryui: "http://somecdn.com/jquery-ui.min.js"
},
shim: {
jqueryui: ['jquery']
}
});
// then in your requires
require([jquery, jqueryui, foo, bar], function($) {
// stuff
});
Run Code Online (Sandbox Code Playgroud)
他们谈论如何在维基中做到这一点.如果您不使用v2.x,那么也有一种处理方法.
如果所有模块都配置为指定自己的依赖项,则您也不必担心order!指令.
Aus*_*tin 19
我找到了RequireJS 2.xx中提供的问题的解决方案.对此解决方案有需求,因此,RequireJS paths在其配置中添加了一个对象.这为CDN提供了回退功能,如果它们失败的话.
还应该注意的是,order!插件在Require 2.0中已被弃用,因此我还需要利用该shim对象来定义依赖项.这实际上是一个非常有趣的想法.
这是我的新require.config:
require.config({
urlArgs: "ts="+new Date().getTime(), // disable caching - remove in production
paths: {
jquery: [
"http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min",
"libs/jquery"
],
jqueryui: [
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min",
"libs/jqueryui"
],
underscore: [
"http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min",
"libs/underscore"
],
backbone: [
"http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min",
"libs/backbone"
]
},
shim: {
'jqueryui': ['jquery'],
'underscore': ['jquery'],
'backbone': ['underscore'],
'core/core': ['underscore'],
'core/errors': ['core/core'],
'core/constants': ['core/core']
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15720 次 |
| 最近记录: |