我很难理解为什么加载了 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 时,它抛出:
Uncaught ReferenceError: define is not defined
即使它使用与 colorbox 完全相同的包装器进行包装。
我什至尝试添加一个垫片(没有意义)看看我是否可以强制加载...但这也没有用:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
我也试过删除 define
包装器,并像这样设置我的 shim,这就是 documentation suggests to do it 的方式:
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
TL;DR; 什么会导致 RequireJS 加载的库无法访问 define
函数?
最佳答案
好的,我想出了一个使用 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
来处理这样的事情,但是,哦,好吧,这算是一个解决方案,可能会在将来帮助其他人。
关于javascript - 用RequireJS加载时 "define"怎么会不定义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20006262/