依赖关系未定义 - RequireJS

时间:2012-10-11 12:25:11

标签: requirejs

我正在尝试使用带有RequireJS的OpenLayers库。

问题是,OpenLayers一直被“未定义”,即使它被列为我模块的唯一依赖项:

define(['OpenLayers'],function (OpenLayers) {
   console.log(OpenLayers);
});

这将打印“undefined”。

如果我用jquery替换OpenLayers(两个.js文件都在同一个文件夹中),它将不再是未定义的。

那么为什么OpenLayers没有被RequireJS加载?

2 个答案:

答案 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'
        }