【问题标题】:requirejs sometimes does not load the dependent modules and gives error "jQuery" undefinedrequirejs 有时不加载依赖模块并给出错误“jQuery”未定义
【发布时间】:2013-12-18 20:10:49
【问题描述】:

我在我当前的项目中使用 requirejs,但有时它不会加载依赖模块并抛出错误“jQuery”未定义......它并不总是发生......如果我刷新页面那么它工作正常。我尝试增加 waitSeconds 但没有成功。

这里:

require.config({
    paths: {
        'jquery': 'lib/jquery-1.10.2.min',      
        'async': 'lib/async',
        'slider': 'lib/jquery.bxslider.min',
        'fixed-scroll': 'lib/iscroll',
        'validation': 'validation-framework',
        'main-nav': 'main-nav',
        'global': 'global',     
        'page-animate': 'page-details-animation',
        'details': 'page-details',
        'pageMap': 'map'
    },
    shim: {
        'jquery': {
            exports: '$'
        },
        'details': {
            deps: ['jquery']
        },
        'page-animate': {
            deps: ['jquery'],
            exports: 'pageAnimate.init'
        },
        'slider': {
            deps: ['jquery'],
            exports: 'bxSlider'
        },
        'fixed-scroll': {
            exports: 'iScroll'
        },
        'validation': {
            deps: ['jquery']
        }       
    }
});

require(['jquery', 'fixed-scroll', 'page-animate', 'main-nav', 'global', 'details', 'slider', 'pageMap', 'validation'], function () {   
    $('.page-details').pageDetails();   
});

【问题讨论】:

    标签: jquery requirejs iscroll


    【解决方案1】:

    根据您报告的错误以及我在问题中看到的内容,我建议 'details' 需要一个 shim:

    shim: {
         [...]
        'details': [ 'jquery' ]
    }
    

    我推断这是由于$('.page-details').pageDetails(),pageDetails 必须由 jQuery 插件提供,并且该插件看起来像(基于使用的名称)向 RequireJS 声明为 'details' 的模块。您得到的错误与此插件未正确填充一致。一个 jQuery 插件需要加载 jQuery 来安装自己,因此需要依赖。

    其他值得了解但不参与错误的事情:

    • jQuery 1.10.x 不需要填充。至少从 1.8 开始就是这样。要求它为'jquery'(全部小写),你会没事的。

    • 您应该使用'jquery' 模块的值,而不是依赖全局$。所以,不要这样做:

       require(['jquery', ...], function () {
           $.whatever();
       });
      

      但有名为$ 的函数参数对应于'jquery' 模块:

      require(['jquery', ...], function ($) {
          $.whatever();
      });
      

    如果您曾经使用过noConflict 或需要支持多个版本的 jQuery(如果您使用需要特定版本的 3rd 方库,则可能会发生这种情况),这将使您的生活更轻松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多