我很难理解为什么加载了RequireJS的模块无法访问define
函数。
在我的HTML中:
<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>
在main.js
:
// Initialize Require.js
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
}
});
// Main app logic
require( ['jquery',
'js/app/cart',
'js/app/wizard',
'js/lib/colorbox',
'js/lib/jvfloat'], function ($, Cart, Wizard, ColorBox, jvfloat) {
// Initialize Cart
Cart.init();
// Initialize Wizard
Wizard.init();
}
);
在那里,colorbox.js
加载得很好并且包裹起来像:
define(['jquery'], function ( jQuery ) {
// ...Colorbox code here
});
当它尝试加载jvfloat.js时,它会抛出:
未捕获的ReferenceError:未定义的定义
即使它与完全相同的包装器包装为colorbox。
我甚至尝试添加一个垫片(不是有意义的),看看我是否可以强制加载......但这也不起作用:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
我也尝试删除define
包装器,并设置我的垫片,这就是documentation suggests to do it:
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
TL; DR; 什么可能导致RequireJS加载的库无法访问define
函数?
答案 0 :(得分:1)
好的我找到了使用RequireJS配置的 shim 部分的解决方法。我之前尝试使用jvfloat
作为数组键,当我应该使用完整的东西时。所以这有效:
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
},
shim: {
'js/lib/jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
});
仍然不知道如何使用define
这样的事情,但是,哦,这可以作为一种解决方案,并可能在将来帮助其他人。