【发布时间】:2016-12-21 17:45:45
【问题描述】:
我编写了一个 Javascript 插件,我想让它与 requireJS 兼容。但是,我很难让它正常工作。我认为我的 AMD 写不正确或类似的东西。
当我尝试执行插件构造函数时,它在 requireJS 加载脚本后没有定义(也没有定义来自 requirejs 的回调变量)。
例如我这样使用requirejs:
requirejs([
'./assets/js/myplugin.js'
], function( myplugin) {
console.log(myplugin); // undefined
new MyPlugin(); // undefined
});
在 myplugin.js 我有这个脚本:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(
'myplugin',
['brandname-util1/util1',
'brandname-util2/util2',
'brandname-util3/util3'],
factory
);
} else if (typeof exports === 'object' && module.exports) {
module.exports = factory(
root,
require('brandname-util1'),
require('brandname-util2'),
require('brandname-util3')
);
} else {
root.MyPlugin = factory(
root,
root.BrandNameUtil1,
root.BrandNameUtil2,
root.BrandNameUtil3
);
}
}(this, function factory(root, util1, util2, util3) {
'use strict';
var MyPlugin = function() {
}
return MyPlugin;
}));
脚本已正确加载(异步),但未定义任何内容。我不确定完全理解它是如何工作的。
编辑:这里是 utils 脚本示例:
// util1
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(
'brandname-util1/util1',
['jquery'],
factory
);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory(require('jquery'));
} else {
root.BrandNameUtil1 = factory(root);
}
}(this, function() {
"use strict";
var util1 = {};
// declare some functions
return util1;
}));
// util2
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(
'brandname-util2/util2',
['jquery'],
factory
);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory(require('jquery'));
} else {
root.BrandNameUtil2 = factory(root);
}
}(typeof window !== "undefined" ? window : this, function() {
"use strict";
var util2 = function() {},
proto = util2.prototype;
// declare some proto
return util2;
}));
// util3
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(
'brandname-util3/util3',
['brandname-util1/util1',
'brandname-util2/util2'],
factory
);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory(
root,
require('brandname-util1'),
require('brandname-util2')
);
} else {
root.BrandNameUtil3 = factory(
root,
root.BrandNameUtil1,
root.BrandNameUtil2
);
}
}(this, function (root, util1, util2) {
"use strict";
var util3 = function() {},
proto = util3.prototype;
// declare some proto
return util3;
}));
【问题讨论】:
标签: javascript requirejs amd