Vor ES6 verfügte Javascript über Modulsteuerungssysteme wie RequireJS, CommonJS und Angular Dependency Injection System. Andere Tools wie Browserify und Webpack selbst haben in diesem Zusammenhang viele Probleme gelöst.
im Jahr 2015 hatten wir eine erste Implementierung des Modulsystems in Vanilla Javascript für Node.js mit der require
wissen wir alle. Aber das ist für Browser noch nicht angekommen.
Strict Mode
vor allem müssen wir ein wenig über Strict Mode sprechen., Ohne sie können wir absolut nichts über Module sprechen.
strict-Modus ist standardmäßig aktiviert, wenn arbeiten wir mit ES6-Modulen, wenn Sie noch nicht wissen, was der strikte Modus ist, gebe ich eine grundlegende Einführung.,ad6″>, in den Aufruf von Methoden ist nicht mehr gezwungen, eine Object
fn.caller
und fn.arguments
, um Zugriff auf den stapel, JavaScriptprotected
static
interface
) Leiden Sie nicht unter der bind
Wenn Sie keine Ahnung haben, sollten Sie sie in der verwenden, an allen richtigen Stellen wird es zum Standard in ES6..,
Export
No modelo CommonJS podemos exportar valores atribuindo eles ao module.exports
como no snippet abaixo:
No ES6, os módulos são arquivos que dão export
uma API (basicamente igual ao CommonJS)., Die Deklarationen, Variablen, Funktionen und alles von diesem Modul existieren nur in den Bereichen dieses Moduls, was bedeutet, dass jede in einem Modul deklarierte Variable für andere Module nicht verfügbar ist (es sei denn, sie werden explizit als Teil der API exportiert und später in das Modul importiert, das sie verwendet).,
Export default
Sie können das Verhalten eines CommonJS grundsätzlich simulieren und dabei die module.exports
durch eine export default
:
Andererseits können die Deklarationen in CommonJS in derexport
nur auf der obersten Ebene Ihres Codes und nicht in einem Teil davon platziert werden., Wir gehen davon aus, dass diese Einschränkung besteht, um Dolmetschern das Leben zu erleichtern, wenn sie Module identifizieren, aber wenn wir sie betrachten, ist dies eine sehr gültige Einschränkung, da wir nicht viele gute Gründe haben, dynamische Exporte innerhalb unserer API-Funktionen zu definieren.
ein weiterer Grund dafür ist der Vortrag unseres lieben Freundes William Grasel auf der Intercon 2017 über die Leistung von Web-Apps (der hier zu finden ist).,
er sagt, dass eine der Möglichkeiten, seine Leistung zu erweitern, darin besteht, Module zu verwenden, da die Module statisch kompiliert werden und bevor Ihr Code überhaupt an den Browser-Interpreter übergeben wird (wie V8 zum Beispiel). Auf diese Weise ist es möglich, nur die Teile des Codes zu extrahieren, die tatsächlich in der Anwendung verwendet werden, anstatt das gesamte Modul zu importieren, und dies wäre nur möglich, wenn die Module auf der obersten Ebene deklariert würden, da alles in einer Funktion etwas Dynamisches und nicht Statisches werden würde.,