Подтвердить что ты не робот

Typescript скомпилировать в один файл

Я использую TS 1.7, и я пытаюсь скомпилировать мой проект в один большой файл, который я смогу включить в свой html файл.

Моя структура проекта выглядит следующим образом:

-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

Мой файл tsconfig:

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

Когда я создаю свой проект, я ожидаю, что файл build.js будет одним большим файлом, скомпилированным из моего источника. Но файл build.js пуст, и я получаю все мои файлы, скомпилированные o js файлы.

Каждый из моих файлов TS немного похож на этот

import {blabla} from "../../bla/blas";

export default class bar implements someThing {
    private variable : string;
}

Что я делаю неправильно?

4b9b3361

Ответ 1

Это будет реализовано в TypeSript 1.8. В этой версии опция outFile работает, когда модуль amd или система.

В настоящее время эта функция доступна в версии разработки Typescript. Чтобы установить этот запуск:

$ npm install -g [email protected]

Для предыдущих версий, даже если это не очевидно, параметры и outFile не могут работать вместе.

Вы можете проверить эту проблему для более подробной информации.


Если вы хотите вывести один файл с версиями ниже 1,8, вы не можете использовать опцию module в tsconfig.json. Вместо этого вам нужно создать пространства имен, используя ключевое слово модуля.

Ваш файл tsconfig.json должен выглядеть следующим образом:

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

Также ваши TS файлы должны выглядеть так:

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

И вместо использования оператора import вам придется ссылаться на импорт по пространству имен.

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

Ответ 2

Используя более свежую версию Typescript, я смог собрать все файлы ts в один большой файл Javascript, используя следующую конфигурацию:

tsconfig.json:

{
    "compilerOptions": {
        "lib": ["es5", "es6", "dom"],
        "rootDir": "./src/",
        "outFile": "./build/build.js"
    }
}