Compilador Closure + Typescript
Quiero usar Typescript y luego Closure Compile (compilación avanzada) para apuntar a ES5 y minimizar la salida.
¿Tengo que usar tsickle en lugar de tsc? Carece de soporte para todas las opciones que tiene tsc, y es muy ambicioso en que quiere traducir los tipos de Typescript a tipos de Closure (que no son 100% compatibles). Realmente no necesito usar tipos de Closure; solo necesito minificación/renombrado de propiedades.
¿Puedo usar tsc para compilar TypeScript a módulos ES6 y usar Closure Compiler para minificarlos (sin verificación de tipos ni optimizaciones basadas en tipos)?
Bono: ¿Cambia esta respuesta si quiero usar la Biblioteca Closure?
Respuesta #1
Técnicamente, puedes tomar la salida ES6 de tsc y pasarla inmediatamente al Closure Compiler, ya que este último está especificado para aceptar JS como entrada. Ya hacemos esto en muchos lugares, por ejemplo, las aplicaciones de Angular compiladas con closure compiler toman la distribución de la biblioteca rxjs e la incluyen en el paquete de closure. Ver https://github.com/angular/closure-demo
En la práctica, encontramos algunas razones para usar algo como tsickle para transformar el JS antes de que Closure lo vea.
- los enums emit no funcionan en Closure (o rollup si entiendo correctamente)
- Closure tiene algunas limitaciones con ES6, por ejemplo, actualmente no soporta
export *- tsickle reescribe eso aexport {each, visible, symbol} - Agregar anotaciones JSDoc ayuda a Closure a entender la estructura del código, lo que puede mejorar las optimizaciones y reduce el número de advertencias que imprime.
Nuestro plan actual es descomponer tsickle en múltiples transformaciones de emisión de TS 2.3, luego podremos ser más claros sobre qué transformaciones realmente necesitan ser habilitadas en el compilador.
Agregar tipos es opcional. Si desactivas el modo tipado de tsickle, simplemente imprimiremos {?} para los tipos en su lugar. Sin embargo, si alguna vez deseas usar la salida de TypeScript desde el código JS de closure, entonces querrás que el verificador de tipos de closure conozca los tipos.
Si estás dispuesto a probar una nueva herramienta de compilación, integraremos tsickle en la cadena de herramientas de Bazel en https://github.com/bazelbuild/rules_typescript en algún momento. Mientras tanto, puedes enviar una solicitud de función para que el main de Tsickle admita más de las banderas de la línea de comandos. (¿Pero creo que Lucidchart ya mantiene un fork de Tsickle?)
Respuesta #2
Me doy cuenta de que llego tarde a la fiesta, pero con respecto a la biblioteca Closure: Ahora hay un fork activo de una versión actualizada de la biblioteca Closure que tiene
- Archivos de definición de Typescript (.d.ts)
- utiliza código ES6 en lugar de goog.require personalizado, goog.define internamente (por lo que no tiene dependencia del compilador Closure)