Compilation de type à fichier unique

J'utilise TS 1.7 et j'essaie de compiler mon projet dans un grand fichier que je pourrai inclure dans mon fichier html.

La structure de mon projet se présente comme suit:

-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 

Mon fichier tsconfig est:

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

Lorsque je construis mon projet, je m'attends à ce que le fichier build.js soit un grand fichier compilé à partir de ma source. Mais le fichier build.js est vide et j'obtiens tous mes fichiers compilés ou js.

Chacun de mes fichiers TS ressemble un peu à cela

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

Qu'est-ce que je fais mal ?

    Cela sera implémenté dans TypeSript 1.8 . Avec cette version, l'option outFile fonctionne lorsque le module est AMD ou système .

    À ce moment, la fonctionnalité est disponible dans la version de développement de type. Pour installer cette exécution:

     $ npm install -g typescript@next 

    Pour les versions précédentes, même si ce n'est pas évident, le module et les options outFile ne peuvent pas fonctionner ensemble.

    Vous pouvez vérifier ce problème pour plus de détails.


    Si vous souhaitez publier un fichier unique avec des versions inférieures à 1,8, vous ne pouvez pas utiliser l'option de module dans tsconfig.json . Au lieu de cela, vous devez créer des espaces de noms en utilisant le mot-clé du module .

    Votre fichier tsconfig.json devrait ressembler à ceci:

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

    De plus, vos fichiers TS devraient ressembler à ceci:

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

    Et au lieu d'utiliser l'instruction import, vous devrez référencer les importations par l'espace de noms.

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