原因
就我而言,这是因为我在requirejs
's中为已经支持 AMD 加载shim
的库 ( ) 指定了依赖项。perfect-scrollbar
结果是它的整个代码在完成其工作define
后被绕过。grunt-contrib-requirejs
基本上,将 requirejs 文件连接在一起,grunt-contrib-requirejs
将
// change this:
define(['d3'],function(d3){...});
// into this:
define('d3', ['d3'],function(d3){...});
而在里面perfect-scrollbar
,已经有了
(function (factory) {
'use strict';
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory); // <-------------------------- this part
// after minification would become:
// define('PerfectScrollbar', ['jquery'], factory);
} else if (typeof exports === 'object') {
factory(require('jquery')); // Node/CommonJS
} else {
factory(jQuery); // Browser globals
}
}(function ($) {
// perfect-scrollbar code here...
});
这与我在中指定的内容相冲突shim
:
shim: {
"PerfectScrollbar": ['jquery', 'jquery.mousewheel']
}
因此,当requirejs
到达PerfectScrollbar
真正定义的部分时,它会跳过它,假设它已经完成了这项工作。
解决方案
不要shim
为已经支持 AMD 的库指定依赖项。
问题
但是如果我需要指定依赖项怎么办?我需要在它的代码中已经指定的jquery.mousewheel
之上。jquery
回答
要求该文件具有适当的要求,并正确获取其自身的依赖项:
define(['perfect-scrollbar', 'jquery.mousewheel'], function(){...});
当您需要的库支持 AMD 时,
// inside jquery.mousewheel:
require(['jquery'], factory);
或者它没有
shim: {
"IDontSupportAMD": ['jquery']
}