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
的名称作为第一个参数的版本。 完整的例子。