8

Aunque JavaScript y sus muchas bibliotecas (jQuery, RequireJS) permiten la creación de muchos sitios web geniales, considero que la falta de seguridad de tipo de tipo me intimida al contemplar la construcción de un sitio web más grande.¿Cuál es la forma más sólida de obtener la seguridad de tipo del compilador de cierre junto con los AMD (requirejs)?

Google tiene un maravilloso closure compiler que le permite a annotate su JavaScript con JSDoc y hacer que escriba check. Después de haber experimentado con su sistema de tipos enriquecidos, espero que esto mejore en gran medida la capacidad de mantenimiento de un proyecto JavaScript de mayor duración.

El único problema es que no funciona muy bien con las bibliotecas AMD como RequireJS. Existe un indicador experimental --transform_amd_modules que concatena sus archivos JavaScript y maneja el alcance eliminándolo. Sin embargo, esto parece ser un poco anti-patrón, eliminando la mayoría de los beneficios de RequireJS (pero manteniendo la estructura de archivos modular). También está la cuestión de cuánto soporte futuro recibirá

Con el objetivo final de ser tipo seguridad no en el caro de los beneficios de RequireJS ¿cuáles serían mis mejores apuestas?

PD: Aunque he utilizado RequireJS como la biblioteca AMD de elección, no estaría en contra de una solución que funcionara con una biblioteca diferente de AMD.

Respuesta

10

Aunque el Closure Compiler se puede utilizar con varias bibliotecas de JavaScript, el mayor beneficio se obtiene cuando se utiliza con el Closure Library, que tiene su propio módulo y sistema de dependencia. Las aplicaciones web que utilizan la biblioteca de cierre generalmente se compilan en un archivo JavaScript, que no requiere la carga asíncrona del módulo. Sin embargo, Closure brinda soporte para módulos, que pueden cargarse de forma asíncrona. Chad Killingsworth proporcionó un buen ejemplo de cómo configurar los módulos here. Además, la herramienta plovr proporciona la adición module support para simplificar su uso.

Si ha decidido utilizar el compilador de cierre (y no está vinculado a una gran base de código AMD), es probable que maximice la productividad adoptando la biblioteca de cierre y su sistema de módulo/dependencia en su nuevo código. Si planea usar una base de código AMD, entonces como mencionó, las nuevas banderas compiladoras experimentales --transform_amd_modules y --process_common_js_modules pueden ayudar, pero al usar bibliotecas no anotadas, se pierde gran parte del poder del compilador.

Mirando hacia el futuro, si ECMAScript Harmony modules se convierte en un estándar oficial, entonces es probable que las bibliotecas como Closure, Dojo y YUI finalmente se ajusten a ese estándar. Esto finalmente podría permitir integrar sin problemas el código JavaScript de bibliotecas dispares. Mientras tanto, si desea escribir aplicaciones de JavaScript y disfrutar de verificación de tipos, eliminación de código inactivo, minificación, administración avanzada de memoria, agnosticismo del navegador y una biblioteca estándar fenomenal, entonces recomiendo usar el Compilador de Cierre junto con el Cierre Biblioteca.

Cuestiones relacionadas