So verwenden Sie ES6-Module über die Dev-Tools-Konsole
Lesezeit: 6 Minuten
Wenn ich ein ES6-Modul erstelle, kann ich es meines Wissens nur aus Code importieren, der selbst ein Modul ist. Dies bedeutet, dass Nicht-Modulcode, z. B. Inline-Javascript, oder die Chrome Dev Tools-Konsole niemals auf Code zugreifen können, der sich in einem Modul befindet.
Ist das wahr? Gibt es eine Möglichkeit, dies zu umgehen, denn es scheint eine ziemlich extreme Einschränkung zu sein?
import('path/to/module.js').then(m => module = m)
// [doSomething] is an exported function from [module.js].
module.doSomething()
Welcher Pfad muss im Falle einer Webpack-Umgebung mit a verwendet werden node_modules Verzeichnis? Ich kann keine Kombination von Dingen zum Laufen bringen
– T3db0t
14. Januar 2020 um 19:55 Uhr
Was möchten Sie importieren? Ein ES6-Modul oder ein von Webpack erstelltes Ausgabeskript? Wenn es sich um Letzteres handelt, bei dem es sich nicht um ein ES6-Modul handelt, glaube ich nicht, dass es funktionieren wird.
– Verwandtschaft
18. Januar 2020 um 2:04
ES6-Modul. In diesem Fall versuche ich nur, Ideen damit zu testen immutabledas lokal in installiert ist node_modules. Ich weiß einfach nicht, welchen Pfad ich verwenden soll import Funktion
– T3db0t
20. Januar 2020 um 16:28
Als leichte Verbesserung können Sie in modernen Browsern Folgendes tun const m = await import('path/to/module.js');
– John
5. November 2020 um 1:27
Mit Skypack gibt es ein praktisches CDN, mit dem Benutzer dies ganz einfach tun können, ohne sich den Aufwand für das Herunterladen von NPM sparen zu müssen.
– Cachius
7. Mai 2022 um 16:05 Uhr
Carl
Sie können die Funktion oder Variable mit einer Zeile wie im globalen Namensraum registrieren window.myFunction = myFunction oder window.myVariable = myVariable. Sie können dies im Modul tun, wo myFunction oder myVariable deklariert werden oder dies in einem separaten Modul tun, in das sie importiert wurden.
Sobald Sie dies getan haben, können Sie es verwenden myFunction Und myVariable über die Chrome DevTools-Konsole.
Zum Beispiel:
import myModule from '/path/to/module.js';
window.myModule = myModule;
// in the console:
myModule.foo();
(Dank an @Evert, dass er diese Lösung in einem Kommentar bereitgestellt hat, wenn auch auf eher umständliche Weise, für die ich eine Weile gebraucht habe, um sie herauszufinden.)
Um es klarzustellen, schreiben Sie das import (Und window.myModule)-Anweisungen in Ihrer HTML-Datei. Navigieren Sie zu dieser Seite. Dann öffnen Sie die Konsole und verwenden Sie myModule.
– Richard
5. Februar 2020 um 15:28
Das ist Liebe. Vielen Dank für die Übermittlung.
– Rico Rodriquez Collins
16. Okt. 2020 um 17:46 Uhr
Ich konnte es nicht verwenden window.myModule Ich musste die Array-Syntax verwenden, damit dies funktionierte. import * as operators from 'rxjs/operators'; window['operators'] = operators;
– Jmaurier
6. November 2020 um 17:23
Ich habe das schlechte Gefühl, dass das so gut ist, wie es nur geht. Na ja, erledigt die Arbeit. Danke!
Der VSCode-Debugger startet ein neues Chrome-Fenster, das mit dem VSCode-Debugger verbunden ist. Sie können in diesem Fenster auch wie gewohnt Chrome Dev Tools (F12) verwenden. Es funktioniert mit ES6-Modulen und Sie können Haltepunkte setzen, die Konsole verwenden, Variablen überprüfen usw.
Falls Sie Probleme beim Einrichten des Debuggers haben, funktioniert es bei mir folgendermaßen:
Gehen Sie zum VSCode-Debug-Fenster (CTRL+SHIFT+D) -> auswählen Add Configuration Aus Dropdown -> Auswählen Chrome Launch oder Chrome Launch Legacy „launch.json“ ändern
Der Schlüssel lag in der Verwendung "sourceMaps": true Und "url": "http://localhost:5000/auth/login" anstatt http://localhost:5000/blog", das ist die Seite, die ich eigentlich debuggen möchte. Als der Debugger jedoch das neue Chrome-Fenster öffnete, wurde meine Seite weitergeleitet /auth/loginalso musste ich diese URL verwenden.
Sie können versuchen, die Vorschauversion des neuen Debuggers zu deaktivieren und die zu verwenden Legacy Version stattdessen: Ausschalten Debug › JavaScript: Use Preview in den VSCode-Einstellungen.
Dann renne Launch Chrome Legacy aus dem Debug-Fenster in VSCode
Um Haltepunkte in VSCode festzulegen, öffnen Sie das Javascript-Modul von Loaded Scripts
Sie können Funktionen, die in Javascript-Modulen enthalten sind, über die Chrome-Entwicklerkonsole aufrufen, indem Sie den Import verwenden, wie in der Antwort von @Kin.
Wenn Sie die Fehlermeldung „TypeError: Modulspezifizierer konnte nicht aufgelöst werden“ erhalten, versuchen Sie, die vollständige URL für die Moduldatei zu verwenden. Unter Windows 10 mit lokal ausgeführtem IIS und Chrome 87 funktioniert dies beispielsweise für mich:
// Call doSomething(), an exported function in module file mymodule.js
import('http://localhost/mysite/myfolder/mymodule.js').then((m) => { m.doSomething(); });
Lionel Rowe
Einige etwas ergonomischere Versionen mit Übereinstimmung zwischen den verschiedenen Importarten:
// import { namedExport1, namedExport2 } from 'https://example.com/lib.js'
const { namedExport1, namedExport2 } = await import('https://example.com/lib.js')
// import defaultExport from 'https://example.com/lib.js'
const { default: defaultExport } = await import('https://example.com/lib.js')
// import * as mod from 'https://example.com/lib.js'
const mod = await import('https://example.com/lib.js')
Evert
Sie können ein Modul nur aus anderen Modulen importieren, weil import ist eine Modulfunktion.
Wie haben Sie vor ES6 Module „importiert“? Du hast es nicht getan, weil es nicht existierte. Sie können tatsächlich mit einem E6-Modul genauso interagieren, wie Sie es mit der Interaktion zwischen zwei unabhängigen Nicht-Modul-Skripten getan haben.
Ah, wenn ich also ein Modul aus Nicht-Modulcode verwenden möchte, entferne ich grundsätzlich das type="module" von dem <script>?
– Timmmm
29. September 2018 um 16:00 Uhr
Das ist nicht nötig. Wenn Sie vor den Modulen zwei Javascript-Funktionen hatten. Wie würden Sie das eine vom anderen anrufen? Globals.
– Evert
29. September 2018 um 16:01 Uhr
Ok… also wie lade ich das Modul (oder eine Funktion aus dem Modul) in ein globales?
– Timmmm
29. September 2018 um 16:15 Uhr
Wenn Sie keine Kontrolle über das Modul haben, das Sie laden, können Sie eine separate es6-Moduldatei schreiben, die das gewünschte Modul importiert, und seine Mitglieder erneut als Globals registrieren.
– Evert
29. September 2018 um 16:26 Uhr
Ah, ich verstehe, das war die Lösung, nach der ich gesucht habe, danke!
– Timmmm
29. September 2018 um 16:28
14538000cookie-checkSo verwenden Sie ES6-Module über die Dev-Tools-Konsoleyes