Gibt es in JavaScript etwas Ähnliches wie @import
in CSS, mit dem Sie eine JavaScript-Datei in eine andere JavaScript-Datei einfügen können?
javascript
file
import
include
Alec Smart
quelle
quelle
script
Tags verwenden?Antworten:
Die alten Versionen von JavaScript hatten keinen Import, enthielten oder erforderten, so dass viele verschiedene Ansätze für dieses Problem entwickelt wurden.
Seit 2015 (ES6) verfügt JavaScript jedoch über den Standard für ES6-Module zum Importieren von Modulen in Node.js, der auch von den meisten modernen Browsern unterstützt wird .
Erstellen Sie zur Kompatibilität mit älteren Browsern Tools wie Webpack und Rollup und / oder Transpilations-Tools wie Babel verwendet werden.
ES6-Module
ECMAScript (ES6) -Module werden in Node.js seit Version 8.5 mit dem
--experimental-modules
Flag und seit mindestens Node.js Version 13.8.0 ohne Flag unterstützt. So aktivieren Sie „ESM“ (V. Node.js der vorherigen Commonjs-Stil Modulsystem [ „CJS“]) Sie entweder"type": "module"
inpackage.json
oder die Dateien die Erweiterung geben.mjs
. (Ebenso können Module, die mit dem vorherigen CJS-Modul von Node.js geschrieben wurden, benannt werden,.cjs
wenn Ihre Standardeinstellung ESM ist.)Verwenden von
package.json
:Dann
module.js
:Dann
main.js
:Mit hätten
.mjs
Siemodule.mjs
:Dann
main.mjs
:ECMAScript-Module in Browsern
Browser unterstützen seit Safari 10.1, Chrome 61, Firefox 60 und Edge 16 das direkte Laden von ECMAScript-Modulen (keine Tools wie Webpack erforderlich). Überprüfen Sie die aktuelle Unterstützung bei caniuse . Die
.mjs
Erweiterung von Node.js muss nicht verwendet werden . Browser ignorieren Dateierweiterungen für Module / Skripte vollständig.Lesen Sie mehr unter https://jakearchibald.com/2017/es-modules-in-browsers/
Dynamische Importe in Browsern
Durch dynamische Importe kann das Skript nach Bedarf andere Skripte laden:
Weitere Informationen finden Sie unter https://developers.google.com/web/updates/2017/11/dynamic-import
Node.js erfordern
Der ältere CJS-Modulstil, der in Node.js immer noch weit verbreitet ist, ist das
module.exports
/require
system.Es gibt andere Möglichkeiten für JavaScript, externe JavaScript-Inhalte in Browser aufzunehmen, für die keine Vorverarbeitung erforderlich ist.
AJAX wird geladen
Sie können ein zusätzliches Skript mit einem AJAX-Aufruf laden und dann
eval
zum Ausführen verwenden. Dies ist der einfachste Weg, der jedoch aufgrund des JavaScript-Sandbox-Sicherheitsmodells auf Ihre Domain beschränkt ist. Die Verwendungeval
öffnet auch die Tür zu Fehlern, Hacks und Sicherheitsproblemen.Laden holen
Wie bei Dynamic Imports können Sie ein oder mehrere Skripte mit einem
fetch
Aufruf laden , indem Sie Versprechen verwenden, um die Ausführungsreihenfolge für Skriptabhängigkeiten mithilfe der Fetch Inject- Bibliothek zu steuern :jQuery wird geladen
Die jQuery- Bibliothek bietet Ladefunktionen in einer Zeile :
Dynamisches Laden von Skripten
Sie können dem HTML-Code ein Skript-Tag mit der Skript-URL hinzufügen. Dies ist eine ideale Lösung, um den Overhead von jQuery zu vermeiden.
Das Skript kann sich sogar auf einem anderen Server befinden. Darüber hinaus wertet der Browser den Code aus. Das
<script>
Tag kann entweder in die Webseite<head>
eingefügt oder kurz vor dem schließenden</body>
Tag eingefügt werden .Hier ist ein Beispiel, wie dies funktionieren könnte:
Diese Funktion fügt
<script>
am Ende des Kopfabschnitts der Seite ein neues Tag hinzu, in dem diesrc
Attribut auf die URL festgelegt wird, die der Funktion als erster Parameter zugewiesen wird.Beide Lösungen werden in JavaScript Madness: Dynamic Script Loading erläutert und veranschaulicht .
Erkennen, wann das Skript ausgeführt wurde
Nun gibt es ein großes Problem, über das Sie Bescheid wissen müssen. Dies bedeutet, dass Sie den Code remote laden . Moderne Webbrowser laden die Datei und führen Ihr aktuelles Skript weiter aus, da sie alles asynchron laden, um die Leistung zu verbessern. (Dies gilt sowohl für die jQuery-Methode als auch für die manuelle Methode zum Laden dynamischer Skripte.)
Wenn Sie diese Tricks direkt verwenden, können Sie Ihren neu geladenen Code in der nächsten Zeile, nachdem Sie ihn zum Laden aufgefordert haben, nicht verwenden , da er noch geladen wird.
Zum Beispiel:
my_lovely_script.js
enthältMySuperObject
:Dann laden Sie die schlagende Seite neu F5. Und es funktioniert! Verwirrend...
Was tun?
Nun, Sie können den Hack verwenden, den der Autor in dem Link vorschlägt, den ich Ihnen gegeben habe. Zusammenfassend lässt sich sagen, dass Personen, die es eilig haben, ein Ereignis verwenden, um eine Rückruffunktion auszuführen, wenn das Skript geladen wird. So können Sie den gesamten Code mithilfe der Remote-Bibliothek in die Rückruffunktion einfügen. Zum Beispiel:
Dann schreiben Sie den Code, den Sie verwenden möchten, nachdem das Skript in eine Lambda-Funktion geladen wurde :
Dann führen Sie das alles aus:
Beachten Sie, dass das Skript möglicherweise ausgeführt wird, nachdem das DOM geladen wurde oder vorher, je nachdem, ob der Browser und ob Sie die Zeile eingefügt haben
script.async = false;
. Es gibt einen großartigen Artikel über das Laden von Javascript im Allgemeinen, in dem dies diskutiert wird.Zusammenführung / Vorverarbeitung des Quellcodes
Wie oben in dieser Antwort erwähnt, verwenden viele Entwickler in ihren Projekten Build- / Transpilations-Tools wie Parcel, Webpack oder Babel, mit denen sie die kommende JavaScript-Syntax verwenden, Abwärtskompatibilität für ältere Browser bieten, Dateien kombinieren, minimieren, Code-Aufteilung usw. durchführen
quelle
onreadystatechange
Ereignis und diereadyState
Eigenschaft). Das dynamische Laden von Skripten profitiert auch nicht von den Preload-Scannern des Browswers. Empfehlen Sie diesen HTML5Rocks-Artikel: html5rocks.com/de/tutorials/speed/script-loadingWenn jemand etwas Fortgeschritteneres sucht, probieren Sie RequireJS aus . Sie erhalten zusätzliche Vorteile wie Abhängigkeitsverwaltung, bessere Parallelität und Vermeidung von Doppelarbeit (dh mehr als einmaliges Abrufen eines Skripts).
Sie können Ihre JavaScript-Dateien in "Module" schreiben und sie dann als Abhängigkeiten in anderen Skripten referenzieren. Oder Sie können RequireJS als einfache Lösung für dieses Skript verwenden.
Beispiel:
Abhängigkeiten als Module definieren:
some-dependency.js
Implementation.js ist Ihre "Haupt" -JavaScript-Datei, die von some-dependency.js abhängt
Auszug aus der GitHub README:
quelle
Es tatsächlich ist eine Möglichkeit , eine JavaScript - Datei zu laden nicht asynchron, so dass Sie die Funktionen in Ihrer neu geladenen Datei rechts enthalten verwenden könnte es nach dem Laden, und ich denke , dass es in allen Browsern funktioniert.
Sie müssen für
jQuery.append()
das<head>
Element Ihrer Seite Folgendes verwenden:Diese Methode hat jedoch auch ein Problem: Wenn in der importierten JavaScript-Datei ein Fehler auftritt, meldet Firebug (und auch Firefox Error Console und Chrome Developer Tools ) seinen Platz falsch. Dies ist ein großes Problem, wenn Sie Firebug zum Verfolgen verwenden JavaScript-Fehler viel runter (ich tue). Firebug kennt die neu geladene Datei aus irgendeinem Grund einfach nicht. Wenn also ein Fehler in dieser Datei auftritt, wird gemeldet, dass er in Ihrer HTML- Hauptdatei aufgetreten ist , und Sie werden Probleme haben, den wahren Grund für den Fehler herauszufinden.
Aber wenn das für Sie kein Problem ist, sollte diese Methode funktionieren.
Ich habe tatsächlich ein jQuery-Plugin namens $ .import_js () geschrieben , das diese Methode verwendet:
Alles, was Sie tun müssen, um JavaScript zu importieren, ist:
Ich habe auch einen einfachen Test dafür bei Beispiel gemacht .
Es enthält eine
main.js
Datei im Haupt-HTML und dann das Skript,main.js
mit$.import_js()
dem eine zusätzliche Datei namens aufgerufen wirdincluded.js
, die diese Funktion definiert:Und direkt nach dem Einschließen
included.js
wird diehello()
Funktion aufgerufen und Sie erhalten die Warnung.(Diese Antwort ist eine Antwort auf den Kommentar von e-satis).
quelle
jQuery.getScript
, auf diese Weise müssen Sie sich nicht um das Schreiben des Plugins kümmern ...script
Elements anhead
dazu, dass es asynchron ausgeführt wird, es sei denn, dasasync
ist speziell auf eingestelltfalse
."
, wird der CodeEine andere Möglichkeit, die meiner Meinung nach viel sauberer ist, besteht darin, eine synchrone Ajax-Anfrage zu stellen, anstatt ein
<script>
Tag zu verwenden. So behandelt auch Node.js.Hier ist ein Beispiel mit jQuery:
Sie können es dann in Ihrem Code verwenden, wie Sie normalerweise ein Include verwenden würden:
Und Sie können in der nächsten Zeile eine Funktion aus dem erforderlichen Skript aufrufen:
quelle
async: false
angeblich veraltet ist, nicht zu stützen. Es ist nicht! Wie in Ihrem Zitat angegeben, handelt es sich nur um jqXHR-bezogene Inhalte.Es gibt eine gute Nachricht für Sie. Sehr bald können Sie problemlos JavaScript-Code laden. Es wird eine Standardmethode zum Importieren von Modulen mit JavaScript-Code und wird Teil des Kern-JavaScript selbst sein.
Sie müssen nur schreiben
import cond from 'cond.js';
, um eincond
aus einer Datei benanntes Makro zu ladencond.js
.Sie müssen sich also weder auf ein JavaScript-Framework verlassen noch explizit Ajax- Aufrufe tätigen.
Beziehen auf:
Statische Modulauflösung
Modullader
quelle
Es ist möglich, ein JavaScript-Tag dynamisch zu generieren und es aus einem anderen JavaScript-Code an ein HTML-Dokument anzuhängen. Dadurch wird eine gezielte JavaScript-Datei geladen.
quelle
js.onload = callback;
Anweisung
import
ist in ECMAScript 6.Syntax
quelle
Vielleicht können Sie diese Funktion verwenden, die ich auf dieser Seite gefunden habe. Wie füge ich eine JavaScript-Datei in eine JavaScript-Datei ein? ::
quelle
script.onload = callback;
var
, wird die Variable global sein?head
.Hier ist eine synchrone Version ohne jQuery :
Beachten Sie, dass der Server
allow-origin
in seiner Antwort einen Header festlegen muss, damit diese domänenübergreifend funktioniert .quelle
http://web.archive.org/web/20140905044059/http://www.howtocreate.co.uk/operaStuff/userjs/aagmfunctions.js
)<script>
Tag laden , nicht überXMLHttpRequest
.const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1");
Ich habe gerade diesen JavaScript-Code geschrieben (unter Verwendung von Prototype for DOM Manipulation):
Verwendungszweck:
Inhalt: http://gist.github.com/284442 .
quelle
Hier ist die verallgemeinerte Version, wie Facebook dies für den allgegenwärtigen Like-Button tut:
Wenn es für Facebook funktioniert, funktioniert es für Sie.
Der Grund, warum wir nach dem ersten
script
Element anstelle vonhead
oder suchen,body
ist, dass einige Browser kein Element erstellen, wenn es fehlt, aber wir haben garantiert einscript
Element - dieses. Lesen Sie mehr unter http://www.jspatterns.com/the-ridiculous-case-of-adding-a-script-element/ .quelle
Wenn Sie in reinem JavaScript wollen, können Sie verwenden
document.write
.Wenn Sie die jQuery-Bibliothek verwenden, können Sie die
$.getScript
Methode verwenden.quelle
Sie können Ihre Skripte auch mit PHP zusammenstellen :
Datei
main.js.php
:quelle
Die meisten der hier gezeigten Lösungen implizieren eine dynamische Belastung. Ich suchte stattdessen nach einem Compiler, der alle abhängigen Dateien zu einer einzigen Ausgabedatei zusammenfügt. Genauso wie Less / Sass- Präprozessoren sich mit der CSS
@import
-Regel befassen . Da ich nichts Anständiges dieser Art fand, schrieb ich ein einfaches Tool, um das Problem zu lösen.Hier ist also der Compiler https://github.com/dsheiko/jsic , der
$import("file-path")
den angeforderten Dateiinhalt sicher ersetzt. Hier ist das entsprechende Grunt- Plugin: https://github.com/dsheiko/grunt-jsic .Im jQuery-Hauptzweig verketten sie einfach atomare Quelldateien zu einer einzigen, beginnend mit
intro.js
und endend mitouttro.js
. Das passt nicht zu mir, da es keine Flexibilität beim Design des Quellcodes bietet. Überprüfen Sie, wie es mit jsic funktioniert:src / main.js
src / Form / Input / Tel.js.
Jetzt können wir den Compiler ausführen:
Und holen Sie sich die kombinierte Datei
build / main.js
quelle
Wenn Sie zum Laden der JavaScript-Datei die Funktionen aus der importierten / enthaltenen Datei verwenden möchten , können Sie auch ein globales Objekt definieren und die Funktionen als Objektelemente festlegen. Zum Beispiel:
global.js
file1.js
file2.js
main.js
Sie müssen nur vorsichtig sein, wenn Sie Skripte in eine HTML-Datei aufnehmen. Die Reihenfolge sollte wie folgt sein:
quelle
Dies sollte tun:
quelle
eval
ist, was daran falsch ist. Aus Crockford : " Isteval
böse. Dieeval
Funktion ist die am häufigsten missbrauchte Funktion von JavaScript. Vermeiden Sie sie.eval
Hat Aliase. Verwenden Sie denFunction
Konstruktor nicht . Übergeben Sie keine Zeichenfolgen ansetTimeout
odersetInterval
." Wenn Sie sein "JavaScript: The Good Parts" nicht gelesen haben, gehen Sie jetzt raus und machen Sie es. Sie werden es nicht bereuen.http://web.archive.org/web/20140905044059/http://www.howtocreate.co.uk/operaStuff/userjs/aagmfunctions.js
)Verwenden Sie ein Skript, um es vor dem Hochladen zu verketten, anstatt es zur Laufzeit einzuschließen.
Ich benutze Kettenräder (ich weiß nicht, ob es andere gibt). Sie erstellen Ihren JavaScript-Code in separaten Dateien und fügen Kommentare hinzu, die von der Sprockets-Engine als Includes verarbeitet werden. Für die Entwicklung können Sie Dateien nacheinander einfügen und dann für die Produktion zusammenführen ...
Siehe auch:
quelle
Ich hatte ein einfaches Problem, aber die Antworten auf diese Frage verwirrten mich.
Ich musste eine Variable (myVar1) verwenden, die in einer JavaScript-Datei (myvariables.js) in einer anderen JavaScript-Datei (main.js) definiert war.
Dafür habe ich wie folgt gemacht:
Laden Sie den JavaScript-Code in der HTML-Datei in der richtigen Reihenfolge, zuerst myvariables.js, dann main.js:
Datei: myvariables.js
Datei: main.js
Wie Sie gesehen haben, hatte ich eine Variable in einer JavaScript-Datei in einer anderen JavaScript-Datei verwendet, aber ich musste keine in eine andere aufnehmen. Ich musste nur sicherstellen, dass die erste vor der zweiten JavaScript-Datei geladene JavaScript-Datei und die Variablen der ersten JavaScript-Datei in der zweiten JavaScript-Datei automatisch zugänglich sind.
Das hat mir den Tag gerettet. Ich hoffe das hilft.
quelle
import
. Sie benötigen eine HTML-Datei, um Inhalte von einer JS-Datei in eine andere zu übertragen.<script>
Tag zu haben. Dies kann bei der Organisation helfen. Diese Antwort ist einfach nicht das, wonach die Frage gestellt wurde, und ist in diesem Zusammenhang nicht ideal.Wenn Sie Web Worker verwenden und zusätzliche Skripts in den Bereich des Workers aufnehmen möchten, finden Sie die anderen Antworten zum Hinzufügen von Skripten zum
head
funktionieren Tag usw. für Sie nicht.Glücklicherweise haben Web Worker eine eigene
importScripts
Funktion, die eine globale Funktion im Bereich des Web Worker ist, die im Browser selbst enthalten ist, da sie Teil der Spezifikation ist .Alternativ als die zweithöchste Antwort auf Ihre Frage Highlights gestimmt , RequireJS kann auch mit den Skripten behandeln innerhalb eines Web - Worker (wahrscheinlich Berufung
importScripts
selbst, aber mit einem paar anderen nützlichen Funktionen).quelle
In der modernen Sprache mit der Prüfung, ob das Skript bereits geladen wurde, wäre es:
Verwendung (asynchron / warten):
oder
Verwendung (Versprechen):
quelle
var pi = 3.14
. Rufen Sie die Funktion loadJS () überloadJs("pi.js").then(function(){ console.log(pi); });
Die
@import
Syntax für den CSS-ähnlichen JavaScript-Import ist mit einem Tool wie Mixture über den speziellen.mix
Dateityp möglich (siehe hier) ). Ich stelle mir vor, dass die Anwendung intern einfach eine der oben genannten Methoden verwendet, obwohl ich es nicht weiß.Aus der Mixture-Dokumentation zu
.mix
Dateien:Hier ist eine Beispieldatei
.mix
, die mehrere.js
Dateien zu einer kombiniert :Mixture gibt dies als
scripts-global.js
und auch als minimierte Version aus (scripts-global.min.js
).Hinweis: Ich bin in keiner Weise mit Mixture verbunden, außer dass ich es als Front-End-Entwicklungstool verwende. Ich bin auf diese Frage gestoßen, als ich a
.mix
JavaScript-Datei in Aktion gesehen habe (in einer der Mixture-Boilerplates) und ein bisschen verwirrt war ("Sie können das tun?", Dachte ich mir). Dann wurde mir klar, dass es sich um einen anwendungsspezifischen Dateityp handelte (etwas enttäuschend, einverstanden). Trotzdem dachte ich, das Wissen könnte für andere hilfreich sein.UPDATE : Die Mischung ist jetzt kostenlos (offline).
UPDATE : Die Mischung wird jetzt eingestellt. Alte Mischungsfreigaben sind noch verfügbar
quelle
quelle
body
noch nicht vorhanden ist oder nicht geändert werden kann. Es hilft auch, Antworten zu erklären.Meine übliche Methode ist:
Es funktioniert großartig und verwendet für mich kein erneutes Laden von Seiten. Ich habe die AJAX-Methode ausprobiert (eine der anderen Antworten), aber sie scheint für mich nicht so gut zu funktionieren.
Hier ist eine Erklärung, wie der Code für Neugierige funktioniert: Im Wesentlichen wird ein neues Skript-Tag (nach dem ersten) der URL erstellt. Es wird in den asynchronen Modus versetzt, damit der Rest des Codes nicht blockiert wird, sondern ein Rückruf aufgerufen wird, wenn sich der readyState (der Status des zu ladenden Inhalts) in "geladen" ändert.
quelle
Obwohl diese Antworten großartig sind, gibt es eine einfache "Lösung", die es seit dem Laden des Skripts gibt und die 99,999% der Anwendungsfälle der meisten Menschen abdeckt. Fügen Sie einfach das benötigte Skript vor dem Skript ein, das es benötigt. Bei den meisten Projekten dauert es nicht lange, um festzustellen, welche Skripte in welcher Reihenfolge benötigt werden.
Wenn script2 script1 benötigt, ist dies wirklich der absolut einfachste Weg, so etwas zu tun. Ich bin sehr überrascht, dass niemand dies angesprochen hat, da dies die offensichtlichste und einfachste Antwort ist, die in fast jedem Einzelfall zutreffen wird.
quelle
Ich habe ein einfaches Modul geschrieben, das das Importieren / Einschließen von Modulskripten in JavaScript automatisiert. Eine ausführliche Erläuterung des Codes finden Sie im Blogbeitrag JavaScript require / import / include modules .
quelle
Dieses Skript fügt eine JavaScript-Datei oben in jedes andere
<script>
Tag ein:quelle
Es gibt auch Head.js . Es ist sehr einfach zu handhaben:
Wie Sie sehen, ist es einfacher als Require.js und so bequem wie die
$.getScript
Methode von jQuery . Es hat auch einige erweiterte Funktionen, wie bedingtes Laden, Funktionserkennung und vieles mehr .quelle
Es gibt viele mögliche Antworten auf diese Frage. Meine Antwort basiert offensichtlich auf einer Reihe von ihnen. Dies ist, was ich am Ende hatte, nachdem ich alle Antworten durchgelesen hatte.
Das Problem mit
$.getScript
und wirklich jeder anderen Lösung, die nach Abschluss des Ladevorgangs einen Rückruf erfordert, besteht darin, dass Sie nicht mehr wissen können, wann alle Skripte geladen wurden (sobald sie verschachtelt sind, wenn Sie mehrere Dateien haben, die sie verwenden und voneinander abhängig sind) in mehreren Dateien).Beispiel:
file3.js
file2.js:
file1.js:
Sie haben Recht, wenn Sie sagen, Sie könnten Ajax für die synchrone Ausführung angeben oder XMLHttpRequest verwenden Der aktuelle Trend scheint jedoch darin zu bestehen, synchrone Anforderungen zu verwerfen, sodass Sie möglicherweise jetzt oder in Zukunft keine vollständige Browserunterstützung erhalten.
Sie könnten versuchen,
$.when
ein Array von zurückgestellten Objekten zu überprüfen, aber jetzt tun Sie dies in jeder Datei und Datei2 wird als geladen betrachtet, sobald die$.when
Ausführung nicht ausgeführt wird, wenn der Rückruf ausgeführt wird. Daher setzt Datei1 die Ausführung fort, bevor Datei3 geladen wird . Das hat wirklich immer noch das gleiche Problem.Ich beschloss, rückwärts statt vorwärts zu gehen. Danke
document.writeln
. Ich weiß, dass es tabu ist, aber solange es richtig verwendet wird, funktioniert es gut. Am Ende erhalten Sie Code, der einfach zu debuggen ist, im DOM korrekt angezeigt wird und die Reihenfolge sicherstellen kann, in der die Abhängigkeiten korrekt geladen werden.Sie können natürlich $ ("body"). Append () verwenden, aber dann können Sie nicht mehr richtig debuggen.
HINWEIS: Sie dürfen dies nur verwenden, während die Seite geladen wird, da sonst ein leerer Bildschirm angezeigt wird. Mit anderen Worten, platzieren Sie dies immer vor / außerhalb von document.ready . Ich habe dies nicht getestet, nachdem die Seite in einem Klickereignis oder ähnlichem geladen wurde, aber ich bin mir ziemlich sicher, dass es fehlschlagen wird.
Ich mochte die Idee, jQuery zu erweitern, aber das müssen Sie natürlich nicht.
Vor dem Aufruf
document.writeln
wird überprüft, ob das Skript noch nicht geladen wurde, indem alle Skriptelemente ausgewertet werden.Ich gehe davon aus, dass ein Skript erst dann vollständig ausgeführt wird, wenn sein
document.ready
Ereignis ausgeführt wurde. (Ich weiß, dass die Verwendungdocument.ready
nicht erforderlich ist, aber viele Leute verwenden sie, und die Handhabung ist ein Schutz.)Wenn die zusätzlichen Dateien geladen werden, werden die
document.ready
Rückrufe in der falschen Reihenfolge ausgeführt. Um dies zu beheben, wenn ein Skript tatsächlich geladen wird, wird das Skript, das es importiert hat, selbst erneut importiert und die Ausführung angehalten. Dies führt dazu, dass derdocument.ready
Rückruf der Ursprungsdatei jetzt nach einem beliebigen Skript ausgeführt wird, das sie importiert.Anstelle dieses Ansatzes könnten Sie versuchen, die jQuery zu ändern
readyList
, aber dies schien eine schlechtere Lösung zu sein.Lösung:
Verwendungszweck:
Datei3:
Datei2:
Datei1:
quelle
Es gibt verschiedene Möglichkeiten, Module in Javascript zu implementieren. Hier sind die 2 beliebtesten:
ES6-Module
Browser unterstützen dieses Modulationssystem noch nicht. Damit Sie diese Syntax verwenden können, müssen Sie einen Bundler wie das Webpack verwenden. Die Verwendung eines Bundlers ist ohnehin besser, da dadurch alle Ihre verschiedenen Dateien zu einer einzigen (oder paarbezogenen) Datei kombiniert werden können. Dadurch werden die Dateien vom Server schneller an den Client gesendet, da mit jeder HTTP-Anforderung ein gewisser Overhead verbunden ist. Durch Reduzieren der gesamten HTTP-Anforderung verbessern wir somit die Leistung. Hier ist ein Beispiel für ES6-Module:
CommonJS (verwendet in NodeJS)
Dieses Modulationssystem wird in NodeJS verwendet. Grundsätzlich fügen Sie Ihre Exporte einem Objekt hinzu, das aufgerufen wird
module.exports
. Sie können dann über a auf dieses Objekt zugreifenrequire('modulePath')
. Hierbei ist es wichtig zu wissen, dass diese Module zwischengespeichert werden. Wenn Sie alsorequire()
ein bestimmtes Modul zweimal verwenden, wird das bereits erstellte Modul zurückgegeben.quelle
Ich bin auf diese Frage gekommen, weil ich nach einer einfachen Möglichkeit gesucht habe, eine Sammlung nützlicher JavaScript-Plugins zu verwalten. Nachdem ich einige der Lösungen hier gesehen hatte, kam ich auf Folgendes:
Richten Sie eine Datei mit dem Namen "plugins.js" ein (oder extensions.js oder was auch immer Sie wollen). Halten Sie Ihre Plugin-Dateien zusammen mit dieser einen Master-Datei.
plugins.js hat ein Array namens
pluginNames[]
, über das wir iteriereneach()
und dann<script>
für jedes Plugin ein Tag an den Kopf anhängen<script src="js/plugins/plugins.js"></script>
ABER:
Obwohl alle Plugins wie vorgesehen in das Head-Tag eingefügt werden, werden sie nicht immer vom Browser ausgeführt, wenn Sie auf die Seite klicken oder sie aktualisieren.
Ich habe festgestellt, dass es zuverlässiger ist, nur die Skript-Tags in ein PHP-Include zu schreiben. Sie müssen es nur einmal schreiben und das ist genauso viel Arbeit wie das Aufrufen des Plugins mit JavaScript.
quelle