RequireJS – jQuery是否区分大小写?

我试图开始与RequireJS,并遇到一个恼人的问题。 。 。

require.config({ baseUrl: 'app_content/scripts', paths: { // the left side is the module ID, // the right side is the path to // the jQuery file, relative to baseUrl. // Also, the path should NOT include // the '.js' file extension. This example // is using jQuery 1.9.0 located at // js/lib/jquery-1.9.0.js, relative to // the HTML page. 'jQuery': 'lib/jQuery/jQuery-2.0.3' } }); 

这,使用大写的Q ,不起作用,但如果我把它改为jquery ,它的确如此。 另外,在我所需的领域也是如此

 <script type="text/javascript"> require(["jQuery"], function ($) { console.log($); }); </script> 

这返回undefined ,但如果我改变一切,以直接了解jquery ,它的工作原理。

这是预期的行为,有什么我可以做的吗?

是的,jQuery自己定义为“jquery”,全部小写。 这很正常。

如果你打开jQuery源代码,你会发现:

 // Register as a named AMD module, since jQuery can be concatenated with other // files that may use define, but not via a proper concatenation script that // understands anonymous AMD modules. A named AMD is safest and most robust // way to register. Lowercase jquery is used because AMD module names are // derived from file names, and jQuery is normally delivered in a lowercase // file name. Do this after creating the global so that if an AMD module wants // to call noConflict to hide this version of jQuery, it will work. if ( typeof define === "function" && define.amd ) { define( "jquery", [], function () { return jQuery; } ); } 

所以你必须在RequireJS调用中把它称为"jquery" 。 这里的问题是,jQuery使用的define是一个“命名define ” ,这是我们创build模块时通常不使用的。 当运行它时,RequireJS优化器会为我们添加这些名称。

无论如何,当使用“命名define ”时,模块名称被设置为给定的名称而不是文件名(正如在我们不使用命名define )。

可以将"jquery"重命名为"jQuery" ,如下所示:

 require.config({ baseUrl: "./js", paths: { "jquery": "jquery-1.10.2" } }); define("jQuery", ["jquery"], function ($) { return $; }); require(["jQuery"], function ($) { console.log($); console.log($("body")[0]); }); 

我正在使用define的名称作为第一个参数的版本。 完整的例子。