我寫了一個Javascript插件,並且我想讓它與requireJS兼容。但是,我有一些困難,使其正常工作。我認爲我的AMD沒有正確寫入或類似的東西。Javascript - 爲requireJS構建插件
當我嘗試執行插件構造函數時,它在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;
}));
謝謝你的回答。它不能解決問題,一切都還沒有定義。 – freaky
我已經編輯了我的答案以及之前沒有注意到的兩個其他問題。 – Louis
謝謝。我無法讓它工作。我認爲我很難正確處理舊的我的util依賴。我通過添加utils的所有代碼來編輯我的問題。 – freaky