8

Obwohl JavaScript und seine vielen Bibliotheken (jQuery, RequireJS) für die Erstellung von vielen großen Websites ermöglichen, finde ich seinen Mangel an Typ Sicherheit entmutigend, wenn man überlegt, eine größere Website zu bauen.Was ist der stabilste Weg, um die Typsicherheit des Closing-Compilers mit AMDs (requirejs) zu kombinieren?

Google hat eine wunderbare closure compiler, die Sie zu annotate Ihr JavaScript mit JSDoc ermöglicht und es Typ überprüfen lassen. Nachdem ich mit seinem Rich-Type-System experimentiert habe, erwarte ich, dass dies die Wartbarkeit eines längerlebigen JavaScript-Projekts erheblich verbessern würde.

Das einzige Problem ist, es spielt nicht sehr schön mit AMD Bibliotheken wie RequireJS. Es gibt ein experimentelles Flag --transform_amd_modules, das Ihre JavaScript-Dateien verkettet und das Scoping behandelt, indem es es eliminiert. Dies scheint jedoch ein bisschen ein Anti-Pattern zu sein, das die meisten Vorteile von RequireJS beseitigt (aber die modulare Dateistruktur beibehält). Es gibt auch die Frage, wie viel zukünftige Unterstützung, die erhalten wird

Mit dem Endziel ist Typ-Sicherheit nicht zu teuer von RequireJS Vorteile, was wäre meine beste Wette?

PS: Obwohl ich RequireJS als AMD-Bibliothek der Wahl verwendet habe, wäre ich nicht gegen eine Lösung, die mit einer anderen AMD-Bibliothek funktioniert.

Antwort

10

Obwohl die Closure Compiler mit verschiedenen JavaScript-Bibliotheken verwendet werden kann, wird der größte Vorteil erzielt, wenn mit der Closure Library verwendet, die ein eigenes Modul und Abhängigkeitssystem hat. Webanwendungen, die die Closure Library verwenden, werden im Allgemeinen in einer JavaScript-Datei kompiliert, die kein Laden von asynchronen Modulen erfordert. Closure bietet jedoch Unterstützung für Module, die asynchron geladen werden können. Chad Killingsworth lieferte ein gutes Beispiel für die Einrichtung von Modulen here. Darüber hinaus bietet das Tool plovr zusätzlich module support, um ihre Verwendung zu vereinfachen.

Wenn Sie sich entschieden haben, den Closure Compiler zu verwenden (und nicht an eine große Codebase gebunden sind), maximieren Sie die Produktivität wahrscheinlich, indem Sie die Closure Library und ihr Modul-/Abhängigkeitssystem in Ihren neuen Code übernehmen. Wenn Sie eine AMD-Codebase verwenden möchten, können Ihnen die neuen experimentellen Compiler-Flags --transform_amd_modules und --process_common_js_modules helfen, aber wenn Sie unbenotete Bibliotheken verwenden, verpassen Sie viel von der Leistungsfähigkeit des Compilers.

Mit Blick auf die Zukunft, wenn ECMAScript Harmony modules ein offizieller Standard werden, dann ist es wahrscheinlich, dass Bibliotheken wie Closure, Dojo und YUI schließlich diesem Standard entsprechen werden. Dies könnte schließlich die nahtlose Integration von JavaScript-Code aus verschiedenen Bibliotheken ermöglichen. In der Zwischenzeit, wenn Sie JavaScript-Anwendungen schreiben und Typprüfung, Dead-Code-Eliminierung, Minification, erweiterte Speicherverwaltung, Browser-Agnostizismus und eine phänomenale Standardbibliothek genießen möchten, empfehle ich den Closure Compiler in Verbindung mit dem Closure Bibliothek.

Verwandte Themen