Javascript “怎么可能?”;定义;使用RequireJS加载时未定义?
我很难理解为什么加载了RequireJS的模块不能访问Javascript “怎么可能?”;定义;使用RequireJS加载时未定义?,javascript,requirejs,amd,Javascript,Requirejs,Amd,我很难理解为什么加载了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> 在这种情况下,colorbox.js加载得很好,包装方式如下: define(['jquery'], function ( jQuery
define
函数
在我的HTML中:
<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>
在这种情况下,colorbox.js
加载得很好,包装方式如下:
define(['jquery'], function ( jQuery ) {
// ...Colorbox code here
});
当它尝试加载jvfloat.js时,会抛出:
未捕获引用错误:未定义定义
即使它是用与色盒完全相同的包装纸包装的
我甚至尝试添加一个垫片(这不是很有意义),以查看是否可以强制加载…但这也不起作用:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
我还尝试移除define
包装器,并按如下方式设置垫片:
TL;博士什么会导致RequireJS加载的库无法访问
define
函数 好的,我使用RequireJS配置的垫片找到了一个解决方法。我以前尝试过的方法是使用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'
}
}
});
仍然不知道如何使用
定义,但是,哦,好吧,这算是一个解决方案,将来可能会帮助其他人。如果jvfloat的包装方式与colorbox相同,为什么要使用shim
shim
适用于未使用define
包装的模块。我说我甚至尝试过使用shim。我理解它的目的。jvFloat是一个jQuery插件,因此,为了确保它具有依赖性,我试图让它与RequireJS一起工作,并确保该插件添加到RequireJS传递的同一个jQuery实例中。我想我关注的是代码块,错过了上面的简短描述。我的错误。。。这看起来确实很奇怪,define
在全局范围内,应该在没有阴影的任何地方都可见。
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.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'
}
}
});