Ich erstelle mein erstes AngularJS-Modul für die Open-Source-Distribution. Ich möchte es so verpacken, dass es für andere leicht zu konsumieren ist.Ist es sinnvoll, UMD ohne Exporte zu verwenden, um einfach eine Abhängigkeit zu erhöhen?
Das UMD-Projekt bietet ein pattern für den Export von JavaScript-Module, die mit AMD kompatibel sind, Commonjs (oder zumindest Node) und Browser-Globals:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['b'], factory); // AMD
} else if (typeof exports === 'object') {
module.exports = factory(require('b')); // Node
} else {
root.returnExports = factory(root.b); // browser global (root is window)
}
}(this, function (b) {
// use b in some fashion
return {}; // return a value to define the module export
}));
Da jedoch AngularJS sein eigenes internes Modulsystem, Registrierung Ein Modul wird ausgeführt, indem einfach eine Methode auf dem Objekt angular
aufgerufen wird, dh angular.module()
. Daher müsste ein UMD-Modul nichts exportieren. es müsste nur angular
anfordern und handeln. In Bezug auf das vorherige Beispiel, denke ich, dass so etwas wie dies aussehen:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
factory(require(['b'])); // AMD
} else if (typeof exports === 'object') {
factory(require('b')); // Node
} else {
factory(root.b); // browser global (root is window)
}
}(this, function (b) {
// use b in some fashion
}));
Oder spezifisch meinem Fall:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
factory(require(['angular'])); // AMD
} else if (typeof exports === 'object') {
factory(require('angular')); // Node
} else {
factory(root.angular); // browser global (root is window)
}
}(this, function (angular) {
angular.module(...);
}));
Ist das keine große Sache, oder geht es gegen den Geist von UMD? Ich frage, weil ich keine UMD-Muster finden konnte, die nichts exportieren.
Ich würde argumentieren, dass es in der Regel an dem Build-Tool liegt zu entscheiden, welche Version der Bibliothek enthalten (Debug vs. komprimiert). Auch, wenn er die Bibliothek gegen Winkel entwickelt, ist es durchaus vernünftig anzunehmen und zu erfordern, und zwar nicht von jemand anderem. Nur meine zwei Cent. – icfantv
Ich spreche nicht nur über "minimized oder nicht", denken Sie an jquery vs. zepto: komplett verschiedene Bibliotheken, aber 99% gleiche API, so dass praktisch jedes Plugin, das auf jQuery beruht, gut mit zepto ... funktioniert es blendet nicht seine eigene jQuery. Ich könnte eine Bibliothek mit der gleichen API wie eckig haben, in welchem Fall das Modul "hilfreich" Laden Winkel für mich wird das Gegenteil von sinnvoll sein. –
In diesem Fall würde ich argumentieren, dass die richtige Implementierung eine Schnittstelle wäre, die die Drittanbieterbibliothek implementieren würde, um eine konsistente API bereitzustellen. Aber das ist alles egal, da @Bungle angedeutet hat, dass er ein angulares JS-Modul schreiben möchte. Er sollte also keine andere Bibliothek unterstützen müssen, wenn er nicht will - zumal angular das Fundament für sein Modul ist und wohl die Grundlage für eckige Webanwendungen ist. Wenn wir über Daten sprechen würden, würde ich Ihnen jedoch 100% zustimmen. – icfantv