Was ist der stabilste Weg, um die Typsicherheit des Closing-Compilers mit AMDs (requirejs) zu kombinieren?

8

Obwohl JavaScript und seine vielen Bibliotheken (jQuery, RequireJS ) die Erstellung vieler toller Webseiten ermöglichen, finde ich den Mangel an Typsicherheit entmutigend Überlegung, eine größere Website zu erstellen.

Google hat einen wunderbaren Abschlusscompiler , mit dem Sie Kommentieren Sie Ihr JavaScript mit JSDoc und lassen Sie es prüfen. 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, dass es nicht sehr gut mit AMD Bibliotheken wie RequireJS spielt. Es gibt ein experimentelles --transform_amd_modules -Flag, das Ihr JavaScript verkettet Dateien und behandelt Scoping, indem Sie es beseitigen. 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 Unterstützung die Zukunft bekommen wird

Mit dem Endziel, Typ-Sicherheit nicht zu teuer von RequireJS-Vorteilen, 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.

    
Dave 28.05.2012, 09:51
quelle

1 Antwort

10

Obwohl der Closure-Compiler mit verschiedenen JavaScript-Bibliotheken verwendet werden kann, wird der größte Vorteil bei der Verwendung mit Closure-Bibliothek , die über ein eigenes Modul- und Abhängigkeitssystem verfügt. 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 dafür, wie man Module einrichtet hier . Darüber hinaus bietet das Tool plovr zusätzliche Modulunterstützung um ihre Verwendung zu vereinfachen.

Wenn Sie sich entschieden haben, den Closure-Compiler zu verwenden (und Sie sind nicht an eine große AMD gebunden) Codebase), werden Sie wahrscheinlich die Produktivität maximieren, indem Sie die Closure-Bibliothek und ihr Modul- / Abhängigkeitssystem in Ihren neuen Code übernehmen. Wenn Sie eine AMD Codebasis verwenden möchten, können Ihnen, wie Sie bereits erwähnt haben, die neuen 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.

Wenn Sie in die Zukunft schauen, wenn ECMAScript Harmony-Module zu einem offiziellen Standard werden, dann ist dies der Fall 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.

    
Christopher Peisert 28.05.2012, 22:39
quelle