首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确配置RequireJS Shim

如何正确配置RequireJS Shim
EN

Stack Overflow用户
提问于 2013-11-06 17:09:14
回答 1查看 451关注 0票数 0

我有一个问题一直困扰着我,因为我最初以为我理解了RequireJS的“shim”配置部分。使用下面的代码,我定义了一个名为“app”的条目,它也恰好是根目录中另一个脚本/对象的名称:

代码语言:javascript
复制
requirejs.config({
    baseUrl: 'scripts',

    shim: {
        'vendor/jquery-2.0.3.min': {
            exports: '$'
        },
        'vendor/underscore-min': {
            exports: '_'
        },
        'vendor/backbone': {
            deps: ['vendor/underscore-min'],
            exports: 'Backbone'
        },
        'library/marionette/backbone.marionette': {
            deps: ['vendor/backbone'],
            exports: 'Marionette'
        },
        'library/backbone.stickit' : {
            deps: ['vendor/backbone'] 
        },
        'library/backbone.subroute' : {
            deps: ['vendor/backbone'],
            exports: 'Backbone.SubRoute'
        },
        'app': {
            deps: [
              'vendor/jquery-2.0.3.min', 
              'vendor/underscore-min', 
              'vendor/backbone',
              'library/backbone.stickit',
              'library/backbone.subroute',
              'library/marionette/backbone.marionette'
            ]
        }
    }
});

如果在紧接以下位置定义方法:

代码语言:javascript
复制
require(['app'], function (app) { 
    app.expose('vent', _.extend({}, Backbone.Events));

    app.initialize(function () {    
      this.vent.trigger('initialized');
    });
});

我可以使用主干,而不必显式地引入它。为什么会这样呢?这是因为我“要求(‘应用程序’”后立即在同一个文件?)

我造成的混乱的另一个方面是,我带来的任何其他资源:

代码语言:javascript
复制
require(['app', 'routers/main'], function (app, MainRouter) { 
    app.expose('vent', _.extend({}, Backbone.Events));

    app.initialize(function () {    
      new MainRouter();

      this.vent.trigger('initialized');
    });
});

抱怨脊梁是“未定义的”。所以,从我定义应用程序的地方可以神奇地获得它,但除此之外,它不是。我觉得我从根本上误解了这件事--有人能帮我纠正一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-06 18:49:43

这看上去不对:

代码语言:javascript
复制
    'app': {
        deps: [
          'vendor/jquery-2.0.3.min', 
          'vendor/underscore-min', 
          'vendor/backbone',
          'library/backbone.stickit',
          'library/backbone.subroute',
          'library/marionette/backbone.marionette'
        ]
    }

无论是'app'不知道AMD(它不使用define(...)),在这种情况下,您需要一个exports值,以便RequireJS知道什么'app'导出,或者AMD感知的(定义'app'调用(define(...))的文件,在这种情况下,您不需要使用shim。

只有在某些特殊情况下,才能使用没有exports值的垫片。例如,连接到其他东西的插件。(即使如此,由于IE的一些限制,文档说您应该使用exports:参见“但是,如果您想在IE中获得404负载检测,请注意.”。)

(而且,这可能解决不了您的问题,但是jQuery 1.9.1不需要shim,所以我怀疑jQuery 2.x是否需要。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19818289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档