Javascript 我的requirejs设置有什么问题?

Javascript 我的requirejs设置有什么问题?,javascript,requirejs,Javascript,Requirejs,我的requirejs配置文件在我看来是正确的。但当我进入我的函数启动我的应用程序时,我只能访问jQuery。有人能看看我的配置文件,告诉我我做错了什么吗?为什么我看不到主干线或下划线,为什么我可以看到jQuery?这是我的配置文件: require.config({ paths: { jquery: "libs/jquery/jquery", underscore: 'libs/underscore/underscore', backbone: "libs/back

我的requirejs配置文件在我看来是正确的。但当我进入我的函数启动我的应用程序时,我只能访问jQuery。有人能看看我的配置文件,告诉我我做错了什么吗?为什么我看不到主干线或下划线,为什么我可以看到jQuery?这是我的配置文件:

require.config({
  paths: {
    jquery: "libs/jquery/jquery",
    underscore: 'libs/underscore/underscore',
    backbone: "libs/backbone/backbone"
  },
  shims: {
    backbone: {
      deps: [
        'underscore',
        'jquery'
      ],
      exports: 'Backbone'
    },
    underscore: {
      exports: '_'
    }
  }
});

require(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
  'use strict';

  debugger;
});

谢谢您的帮助。

我认为您使用的是垫片,而不是单数垫片,更改它可以解决您的问题

shim: {
   underscore: {
     exports: '_'
   },
   backbone: {
     deps: [
      'underscore',
      'jquery'
     ],
     exports: 'Backbone'
  }
}

您使用的下划线和主干线版本不符合AMD,因此它们不会以require.js需要的方式返回。您可以将它们从函数参数中删除,它们将在全局范围中可用。否则,将未定义的作为u和主干的值传递到函数中

require(['jquery', 'underscore', 'backbone'], function() {
  console.log($);
  console.log(_);
  console.log(Backbone);
});

这就是他在require中使用shim的原因,因为他没有使用AMD兼容的版本。是的,但没有理由使用shim,因为它们将是全局的。否,因为他在html中声明它们使用require而不是常规脚本标记,所以,在当时,如果不使用垫片就需要主干网,那么它将失败。我认为require的目的之一就是不需要一堆全局的?那么这三个文件中的每一个都是全球性的?是的,但这是不可避免的,除非OP使用的是AMD兼容版本的文件(下划线,主干线)