Backbone.js 使用Require.js导入jQuery、下划线和主干的依赖项解析

Backbone.js 使用Require.js导入jQuery、下划线和主干的依赖项解析,backbone.js,requirejs,underscore.js,Backbone.js,Requirejs,Underscore.js,在过去的几个小时里,我一直在试图找出为什么我的代码不能根据我一直在尝试遵循的几个教程正常工作。事情是这样的。很多关于在主干网中使用Require.js的教程和文章的代码如下所示: define(["jquery", "underscore", "backbone"], function($, _, Backbone){ return function(){ /* Some instantiation of Backbone stuff */ }; }); 当我试图运行这段代码时

在过去的几个小时里,我一直在试图找出为什么我的代码不能根据我一直在尝试遵循的几个教程正常工作。事情是这样的。很多关于在主干网中使用Require.js的教程和文章的代码如下所示:

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});
当我试图运行这段代码时,控制台会说“主干未定义”。奇怪的是jQuery对象被成功地实例化为$。只是“u”和“主干”没有定义。所以我做了一些搜索,发现了use.js

我被告知use.js的诞生是因为主干网的主要贡献者不想仅仅为了使其适合require.js而更改Backbone.js的代码,我理解这一点。因此,我尝试使用use.js在require的配置中指定主干的依赖项设置,如下所示:

require.config({
  use: {
    'backbone': {
      'deps': ['use!underscore', 'jquery'],
      'attach': 'Backbone'
    },
    'underscore': {
      'attach': '_'
    }
  }
});
添加此代码并调用“use!”!“主干”从最初的定义,而不是要求“下划线”和“主干”,它最终工作。但我不明白这里发生了什么。如果我必须完成所有这些工作才能使主干网正常工作,为什么所有的文章和教程都没有提到这个事实?这几乎就像他们的版本在不做这些的情况下工作得很好。有什么变化吗


这也是使用require.js处理主干网的唯一方法吗?有没有更简单的方法?(最新方法)

如果您使用的是RequireJS 2.0,您可以使用
shim
功能来包括非AMD模块

以下文章可能会有所帮助:


也许这些信息会帮助你

// This set's up the module paths for underscore and backbone
require.config({ 
    'paths': { 
        "underscore": "libs/underscore-min", 
        "backbone": "libs/backbone-min"
    },
    'shim': 
    {
        backbone: {
            'deps': ['jquery', 'underscore'],
            'exports': 'Backbone'
        },
        underscore: {
            'exports': '_'
        }
    }   
}); 

require([
    'underscore',
    'backbone',
    'app'
    ], 
    function(_, Backbone, app){
        app.init();
});

这样做

define('backbone', [], function(){ return window.Backbone;});
这样您就定义了什么是主干,主干将连接到窗口。在安装最初需要的位置执行此操作。在初始化主干后定义主干

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});
希望有帮助

干杯!
Suj

谢谢。我确实理解这是它应该如何工作的,但我想我的问题是,为什么有那么多文章中的代码没有考虑到这一点?例如,答案是正确的。require.js从版本2开始就不推荐使用
插件,而支持
垫片
。问得好@Vlad!我不知道你提到的演示是如何工作的,除非他们像我一样使用垫片,或者使用AMD主干和下划线的叉子。。。