Für meine Schüler im ersten Jahr habe ich eine einfache ES5-basierte Bibliothek bereitgestellt, die mit dem Revealing Module Pattern geschrieben wurde. Hier ist ein Ausschnitt aus dem "Haupt" -Modul / Namespace, der andere Erweiterungen enthalten wird:
window.Library = (function ($) {
if (!$) {
alert("The Library is dependent on jQuery, which is not loaded!");
}
return {};
})(window.jQuery);
Dies funktioniert für fast 99,9% der Studenten, die neu in der Webentwicklung sind und keine ausgefallenen Dinge wie ES6 in Kombination mit Webpack oder Babel verwenden.
Die 0,1% haben mich nun gebeten, eine ES6-basierte Version bereitzustellen, die ordnungsgemäß importiert werden kann. Ich würde das gerne zur Verfügung stellen, aber ich bin mir nicht sicher, wie ich das am besten angehen soll.
Ich möchte natürlich den ES5-Weg beibehalten, damit meine Schüler die Datei einfach mit einem Skript-Tag einfügen und eingeben können, Library.SomeExtension.aFunction();
wo immer sie möchten. Darüber hinaus sind einige der Erweiterungen auf jQuery angewiesen, das auf ähnliche Weise wie das obige Snippet injiziert wird.
Ich suche jetzt nach einem wartbaren Weg, um das Beste aus beiden Welten mit einer Codebasis und jQuery als Abhängigkeit herauszuholen. Ich möchte 99,9% a geben window.Library
, während ich 0,1% eine Verwendungsmöglichkeit geben möchte import Library from 'library'
.
Kann ich dies mit einer einzelnen JS-Datei erreichen, die beides kann? Oder würde ich eine spezielle ES6-Version benötigen (kein Problem)? Und vor allem: Wie würde ich meinen Code (alle ähnlich dem obigen Snippet) so neu mischen, dass ich beide Situationen unterstützen kann?
Alle Hinweise werden sehr geschätzt!
EDIT: Nur als Randnotiz, ich habe bereits eine vorhanden gulpfile.js
, die diese Bibliothek durchläuft Babel
, minifiers
und andere Dinge. Das zu erweitern, um das oben genannte Problem zu lösen, ist also kein Problem!
Library.SubLibrary.functionName
Setup wirklich und auch in separaten Dateien behalten , selbst wenn jemand es als ES6 oder was auch immer importiert. (Dies liegt hauptsächlich daran, dass Erweiterungen sich auch gegenseitig verwenden können. Bei Verwendung eines Standard-ES6-Setups würde dies zu Zirkelverweisen führen.)
export
haben und die andere zuweisen window
. Ich dachte, es wäre großartig, wenn beide in einer einzigen Datei ausgeführt werden könnten, da sich das so viel eleganter anfühlt, aber das export
Schlüsselwort scheint nur in a zu funktionieren type=module
. Ich weiß nicht, ob es eine Problemumgehung gibt oder ob es einfach unmöglich ist.