我从刚插入requireJS
的新库中收到了未定义的错误。我知道未定义的错误与使用之前未加载的'wNumb'
模块有关。如果我在'wNumb'
中加载config.js
模块:require(['main', 'wNumb']);
一切正常。
// conifg.js
require.config({
paths: {
'main': 'main',
'socketio': './libs/socket.io/socket.io',
'plotly': './libs/plotly/plotly-latest.min',
'renderDataToPlotly': './scripts/renderDataToPlotly',
'noUISlider': './libs/noUiSlider.8.5.1/nouislider.min',
'wNumb': './libs/wnumb-1.0.2/wNumb',
'sliders': './scripts/sliders',
'makePlotlyWindowResponsive': './scripts/makePlotlyWindowResponsive'
}
});
require(['main']);
// main.js
define([
'socketio',
'sliders', //---------------------------------------------> NOTE: sliders.js loading here
'makePlotlyWindowResponsive',
'renderDataToPlotly'
],
function(io, sliders, makePlotlyWindowResponsive, renderDataToPlotly) {
//
}
);
// sliders.js
define(['noUISlider', 'wNumb'], function(noUISlider, wNumb) {
console.log(wNumb); // ---------------------------------------------------> undefined
});
问题:为什么会这样? 'wNumb'
执行时不应该console.log(wNumb);
加载?
谢谢
答案 0 :(得分:1)
事实上,当您使用RequireJS的库时遇到问题,您应该检查它是如何导出的。文档有时会告诉您它与哪些内容兼容。否则,您必须阅读源代码。要使用带有RequireJS的wNumb 1.0.2,它的行为大致类似于正确的AMD模块,你必须使用垫片:
shim: {
wNumb: {
exports: "wNumb",
},
}
这将为模块提供全局变量wNumb
的值(与window.wNumb
相同)。这就是你如何让图书馆对AMD不了解但在全球空间中自我导出以使用RequireJS。
但是,如果你可以将wNumb升级到更好的1.0.4 ,因为这个版本引入了proper code使wNumb
成为一个合适的AMD模块:它调用define
当它检测到有可用的AMD加载程序时。那你不需要shim
。
答案 1 :(得分:0)