我正在尝试使用带有RequireJS的OpenLayers库。
问题是,OpenLayers一直被“未定义”,即使它被列为我模块的唯一依赖项:
define(['OpenLayers'],function (OpenLayers) {
console.log(OpenLayers);
});
这将打印“undefined”。
如果我用jquery替换OpenLayers(两个.js文件都在同一个文件夹中),它将不再是未定义的。
那么为什么OpenLayers没有被RequireJS加载?
答案 0 :(得分:10)
此代码对我有用:
require.config({
shim: {
OpenLayers: {
exports: 'OpenLayers'
}
}
});
require(['OpenLayers'], function(OpenLayers) {
console.log(OpenLayers);
});
答案 1 :(得分:6)
Backbone.Marionette遇到了同样的问题。将'marionette': { exports: 'Marionette' }
添加到shim
对象有效。
此shim
添加适用于OpenLayers和Marionette,原因如下(来自RequireJS documentation):
shim:为不使用define()的旧的传统“浏览器全局”脚本配置依赖项和导出,以声明依赖项并设置模块值。示例(RequireJS 2.1.0 +):
requirejs.config({
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
}