requirejs - yepnope 的多个条件

标签 requirejs yepnope labjs

我使用 yepnope.js 作为加载的资源。仅当加载该模块的所有依赖项时,我才想在我的 JS 模块中执行代码。我不想加载已经加载的 JS 依赖项。

假设我有依赖项 D1.js 和 D2.js。我试过

yepnope({
    load: ['D1.js', 'D2.js],
    complete: function() {
        //execute my code here
    }
});

这可行,但是每次都会加载资源,即使它们之前已经加载过。

如果我做这样的多个测试:
yepnope([{
    test: $().d1,
    nope: 'D1.js'
},
{
    test: $().d2,
    nope: 'D2.js'
}]);

目前尚不清楚将整体完成的功能放在哪里 - 在所有资源加载后运行的功能。

是否可以使用 yepnope 执行此操作,还是需要使用其他组件?

谢谢。

最佳答案

假设您需要有条件地加载 jquery.js、jquery.jgrowl.js 和 jquery.powertip.js。
您希望以下代码能够正常工作:

yepnope([{
  test: typeof(window.jQuery) === 'undefined' || 
        jQuery.fn.jquery.match(/^1\.[0-9]+/) < 1.7,
  yep: '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js'
},
{
  test: typeof(window.jQuery) === 'undefined' 
        || typeof(window.jQuery.fn.jGrowl) === 'undefined',
  yep: ['//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.js',
        '//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.css'],
  complete: function() {
    console.log('completed loading jGrowl (should fire first, or not at all)');
  }
},
{
  test: typeof(window.jQuery) === 'undefined' 
        || typeof(window.jQuery.fn.powerTip) === 'undefined',
  yep: ['//cdnjs.cloudflare.com/ajax/libs/jquery-powertip/1.1.0/jquery.powertip.js', 
        '//cdnjs.cloudflare.com/ajax/libs/jquery-powertip/1.1.0/jquery.powertip.min.css'],
  complete: function() {
    console.log('completed loading powertip'); 
    jQuery.jGrowl("Growling!");
  }
}
]);

但是,如果它在 jquery.powertip.js 已经加载但 jquery.jgrow.js 没有加载的页面上运行,这将引发错误,因为立即触发“完成”回调,而不是当所有文件已完成加载。

以下 fiddle 演示了 yepnope 1.5.4 的此错误:
http://jsfiddle.net/dergachev/HHxK2/

另请注意,在 yepnope 的当前主干(主分支)中,此错误消失了。
它可能与以下票证有关(从未向后移植到 1.5.4):
  • https://github.com/SlexAxton/yepnope.js/pull/140
  • https://github.com/SlexAxton/yepnope.js/issues/132
  • https://github.com/SlexAxton/yepnope.js/issues/100
  • https://github.com/SlexAxton/yepnope.js/issues/96
  • https://github.com/SlexAxton/yepnope.js/issues/29
  • 关于requirejs - yepnope 的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330130/

    相关文章:

    javascript - LabJs 还是 HeadJS?

    javascript - RrequireJS优化器以及优化后加载动态路径

    javascript - 主干 Js + Require Js + AmCharts

    javascript - 现代化测试

    javascript - Modernizr.load 在 IE8 中无法正常工作

    javascript - 如果加载超时,LABJS 中是否提供了回调函数?

    javascript - 加载两个脚本 block (使用 lab.js 作为加载管理器)

    requirejs - 如何将 require-js 文本插件与 karma 一起使用

    javascript - 如何在 Webpack 中禁用捆绑以进行开发?

    javascript - 为 HTML5 日期输入添加 Polyfill/fallback?