tutorial - sumar dos numeros en typescript
Cómo construir un único módulo ES6 a partir de varios archivos TypeScript(para una biblioteca de frontend) (2)
La forma correcta es crear un archivo de barril que reexportará los módulos.
// foo/a.ts
export function a() {}
// foo/b.ts
export function b() {}
// foo/index.ts
export {a} from ''./a'';
export {b} from ''./b'';
Luego en tu consumidor:
import {a, b} from ''./foo'';
a();
b();
El código de mi biblioteca de frontend está dividido en varios archivos fuente.
Ejemplo:
// a.ts
function a() {}
// b.ts
function b() {}
// main.ts
const myLib = {
a: a,
b: b
}
Necesito construir un módulo ES6 (es decir, un archivo JavaScript) que exporte solo myLib
, como la exportación predeterminada.
Veo dos opciones. El primero:
- Ejecute
tsc
para compilar cada archivo en JavaScript; - Concatenar todos los archivos JS generados en un único archivo
my-lib.js
; - Agregue el código que necesita ES6 (
export …
).
El segundo:
- Concatenar todos los archivos de TypeScript en un solo archivo
my-lib.ts
; - Adjunte la exportación:
export default myLib
; - Ejecute
tsc
en el archivo concatenado.
Ambas opciones son feas y pierden el archivo del map
.
¿Hay una mejor manera de hacer eso?
Agrego una respuesta porque hoy la forma correcta para una biblioteca de frontend es usar Rollup .
Primero, escriba los módulos de ES6, import
y export
:
// file-a.ts
export function a() {}
// file-b.ts
export function b() {}
// main.ts
export { a } from "./file-a"
export { b } from "./file-b"
Luego, compile el código a JavaScript usando tsc
con el module
opción establecido en "es6"
.
Luego, deje que Rollup cree un paquete plano a partir del código JavaScript. Para el código anterior, Rollup genera este paquete:
function a() {}
function b() {}
export { a, b };
Ver también:
- El Rollup REPL: https://rollupjs.org/repl
- El artículo: Webpack y Rollup: el mismo pero diferente
Aviso: no encontré una solución fácil para el archivo de definición .d.ts
. Todavía concateno archivos con un script Node.js para generar tipos exportados en un solo archivo de definición de TypeScript.