我遇到一些问题,我尝试通过require.js加载store.js,结果是它不同站点之间(我正在尝试书签)。我正在使用此处的网站列表。 https://github.com/jrburke/requirejs/wiki/Sites-using-RequireJS
bbc.com和fool.com有效,但其他(http://www.rtt.ag/en,http://www.usatoday.com/,http://www.hallmark.com/easter/ideas/easter-recipes/)不一致。例如,有时jquery不可用,有时qtip不可用,有时商店不可用。
if (window.require) {
requirejs.config({
paths: {
jq: '//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min',
qtip2: '//cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip',
json2: '//cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.min',
jstore: '//cdnjs.cloudflare.com/ajax/libs/store.js/1.3.14/store.min'
},
map: {
'qtip2': { 'jq': 'jquery-private' },
'json2': { 'jq': 'jquery-private' }
},
findNestedDependencies: true
});
define('jquery-private', ['jq'], function () {
return jQuery.noConflict(true);
});
require(['jstore'], function(store){
require(['jquery-private', 'qtip2', 'json2'], function (jay) {
console.log(store);
console.log(jay);
qtip2Initializer(jay,store);
});
});
}
function qtip2Initializer(jay,store) {
console.log(jay().jquery);
// Your logic to execute when qTip2 is available
jay(document).ready(function () {
$('a').qtip();
store.set("test",1);
});
}
答案 0 :(得分:0)
您的代码无法在某些网站上运行,这并不神奇。我没有按下整个列表,但http://www.rtt.ag/en和http://www.usatoday.com/没有定义window.require
,所以您展示的代码会测试为它,找到它不存在并跳过if
分支。以下是为什么任何给定网站可能无法正常工作的原因:
您refer to由社区维护的网站列表。所以它很可能是错的。如果某个网站过去常常使用RequireJS,但我不希望他们的开发人员访问此列表并删除该链接。
window.require
可能由于其他原因而被定义,而不是加载RequireJS。其他加载系统在全局空间中定义require
。 (您可能在控制台中遇到一些错误。)
可以使用RequireJS,但不能在那里定义通常在全局空间中定义的任何符号。例如,如果站点使用使用namespace
选项的优化捆绑包,则通常为全局的符号将在此命名空间中定义。
另一种情况是优化捆绑包加载Almond并配置为不会将任何内容泄漏到全局空间中。
您正在尝试做的其他问题:
findNestedDependencies
是优化器选项,而不是运行时选项。所以它什么都不做。
jQuery必须在依赖项中列为jquery
,因为它在调用define
时对其名称进行了硬编码。如果您使用与jquery
不同的名称,则会出现不稳定的行为。
您报告的间歇性错误通常适用于从两个不同位置获取jQuery的情况。除了你的代码加载带有RequireJS的jQuery之外,还可以这样做:
一个。该站点的代码使用RequireJS加载jQuery。
湾该网站的代码使用<script>
标记加载jQuery。
℃。该网站的代码以另一种方式加载jQuery。
由于RequireJS是异步的,任何依赖于jQuery的代码都可能获得一个jQuery实例,当加载第二个jQuery时,它将被覆盖。