Typescript si compila in un singolo file

Sto usando TS 1.7 e sto cercando di compilare il mio progetto in un unico file che potrò includere nel mio file html.

La mia struttura del progetto si presenta così:

-build // Build directory -src // source root --main.ts // my "Main" file that uses the imports my outer files --subDirectories with more ts files. -package.json -tsconfig.json 

il mio file tsconfig è:

  { "compilerOptions": { "module":"amd", "target": "ES5", "removeComments": true, "preserveConstEnums": true, "outDir": "./build", "outFile":"./build/build.js", "sourceRoot": "./src/", "rootDir": "./src/", "sourceMap": true } } 

Quando costruisco il mio progetto mi aspetto che il file build.js sia un grande file compilato dalla mia fonte. Ma il file build.js è vuoto e ottengo tutti i miei file compilati su file js.

Ciascuno dei miei file TS assomiglia un po ‘a questo

 import {blabla} from "../../bla/blas"; export default class bar implements someThing { private variable : string; } 

Che cosa sto facendo di sbagliato ?

Questo sarà implementato in TypeSript 1.8 . Con questa versione l’opzione outFile funziona quando il modulo è amd o system .

Al momento la funzione è disponibile nella versione di sviluppo di Typescript. Per installare quella corsa:

 $ npm install -g [email protected] 

Per le versioni precedenti anche se non è ovvio il modulo e le opzioni outFile non possono funzionare insieme.

Puoi controllare questo problema per maggiori dettagli.


Se si desidera generare un singolo file con versioni inferiori a 1.8, non è ansible utilizzare l’opzione module in tsconfig.json . Invece devi creare spazi dei nomi usando la parola chiave module .

Il tuo file tsconfig.json dovrebbe assomigliare a questo:

 { "compilerOptions": { "target": "ES5", "removeComments": true, "preserveConstEnums": true, "outFile": "./build/build.js", "sourceRoot": "./src/", "rootDir": "./src/", "sourceMap": true } } 

Anche i tuoi file TS dovrebbero assomigliare a questo:

 module SomeModule { export class RaceTrack { constructor(private host: Element) { host.appendChild(document.createElement("canvas")); } } } 

E invece di usare la dichiarazione di importazione dovrai fare riferimento alle importazioni per namespace.

 window.addEventListener("load", (ev: Event) => { var racetrack = new SomeModule.RaceTrack(document.getElementById("content")); });