我为 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);
});
但是,代码无序加载:
- 加载 jquery 和插件 js 文件。
- 执行 $('#plugin').plugin(options)。
- 运行 (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);
});
不幸的是,现在这个块中的代码永远不会被执行。