为什么我的插件没有加载其依赖项?

时间:2013-09-18 09:14:21

标签: javascript jquery jquery-plugins requirejs underscore.js

我正在开发一个使用require.js加载依赖项的应用。我还为应用程序中使用的jQuery编写了一个插件。 jQuery插件依赖于Underscore,但不支持AMD。我的问题是,在运行应用程序时,我的插件无法使用Underscore。

一些代码段:

index.js

require.config({
    baseUrl: "js/app",
    paths: {
        underscore: "//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min",
        myPlugin: '../lib/myPlugin/myPlugin.js',
    },
    shim: {
        underscore_global: {
            exports: '_'
        },
        myPlugin: {'deps': ['jquery', 'underscore']},
    }
});

使用我的插件:

define(function (require) {
    "use strict";

    var $ = require('jquery'),
        myPlugin = require('myPlugin')

控制台说,当插件试图调用函数时,Underscore(_)是未定义的。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的插件取决于underscore。这是 NOT 一个AMD模块,因此就RequireJS而言,define()没有underscore_global。 (实际上它定义了全局范围内的某些内容,但Require并不关心这一点。)这就是为什么你有require.config({ shim: { underscore_global: { exports: '_', deps: ['underscore'] }, myPlugin: {'deps': ['jquery', 'underscore_global']}, ... } }); 垫片的原因。我建议进行以下更改:

{{1}}