我尝试在我的应用中使用inview插件,该插件使用RequireJS加载脚本,并使用Almond进行构建/优化。我收到一个控制台错误:
TypeError: 'undefined' is not an object (evaluating 'global.jquery.inview')
似乎来自垫片需要添加到inview文件的末尾:
define("jquery.inview", ["jquery"], (function (global) {
return function () {
var ret, fn;
return ret || global.jquery.inview;
};
}(this)));
我的需求配置如下:
require.config({
paths: {
'jquery': '../../bower_components/jquery/dist/jquery',
'text': '../../bower_components/requirejs-text/text',
'tweenmax': '../../bower_components/greensock/src/uncompressed/TweenMax',
'jquery.inview': '../../bower_components/jquery.inview/jquery.inview'
},
shim: {
"jquery.inview": {
deps: ['jquery'],
exports: 'jquery.inview'
}
}
});
非常感谢任何帮助!
答案 0 :(得分:1)
jquery.inview
是一个jQuery插件。因此,它通过修改$
将其自身安装为插件。当您告诉RequireJS它导出jquery.inview
时,RequireJS会尝试解析全局空间中的jquery.inview
,这不起作用,因为jQuery可以在全局空间中作为$
或jQuery
访问,而不是jquery
。
您可以将exports
保留或将其设置为jquery.inview
确定的内容。例如,阅读jquery.inview
的代码我发现它设置了$.event.special.inview
,因此您可以在exports
中使用此代码。
如果您想知道,对于jQuery插件,exports
值仅对RequireJS的簿记有用。你不是自己通过它导出的值访问插件,而是通过它通过jQuery公开的API。