2

我为 AMD 编写了一个使用 requirejs 的 Web 应用程序:

require(dependencies, function(dependencies) { 
    (function($) {
        $.fn.plugin = function(options) { return this; };
    })(window.jQuery);
});

然后,我使用 almond 和 r.js 使用构建配置将其编译为单个 javascript 文件:

({
    baseUrl: ".",
    paths: {
        'jquery' : 'vendor/jquery-1.9.1.min'
        'almond' : "../node_modules/almond/almond"
    },
    name : "almond",
    include : "main",
    out : "plugin.js",
    wrap : true
})

接下来,我想在另一个应用程序中使用这个插件,同样基于 requirejs。在这里我有:

require.config({ paths: { 'jquery': 'vendor/jquery-1.9.1.min' } });
require(['jquery','plugin'], function ($) {
    $('#plugin').plugin(options);
});

但是,代码无序加载:

  1. 加载 jquery 和插件 js 文件。
  2. 执行 $('#plugin').plugin(options)。
  3. 运行 (function($) { $.fn.plugin = function(options) { return this; }; })(window.jQuery);

显然,(2) 是错误的,因为需要先运行 (3)。问题是,为什么?

更新 1

一个建议的解决方案是将第一个代码块更改为:

define(dependencies, function(dependencies) { 
    (function($) {
        $.fn.plugin = function(options) { return this; };
    })(window.jQuery);
});

编译后变成:

define("main", dependencies, function(dependencies) { 
    (function($) {
        $.fn.plugin = function(options) { return this; };
    })(window.jQuery);
});

不幸的是,现在这个块中的代码永远不会被执行。

4

0 回答 0