Компиляция нескольких файлов Typescript

мой сервер NodeJS Typescript вырос в сложности и теперь полагается на несколько классов, определенных в другом .файл ТС. Это создало странную проблему компиляции:

  • tsc server.ts компилирует все в порядке. Но!--1--> сбои в первая строка, которая создает экземпляр класса из другой .файл TS

  • tsc --out server.js server.ts результаты в сообщении об ошибке: "модуль emit сталкивается с испускаемым скриптом"

  • tsc --out serv.js server.ts кажется работы, но на самом деле компилирует все, кроме сервера.ts. Код из других файлов, есть и node serv.js просто возвращается без каких-либо выходных

Я не единственный с этой ошибкой,https://typescript.codeplex.com/workitem/294 к сожалению, решение на codeplex не работает для меня.

как использовать tsc правильно ?

2 ответов


код server.ts зависимости должны быть модулями, которые экспортируют свою площадь поверхности с помощью верхнего уровня export директивы, и server.ts должен загрузить их с помощью import директивы. Основная причина здесь заключается в том, что TypeScript имеет два разных типа юниверсов для компиляции.

первый-это тот, который вы используете по умолчанию для обычных веб-страниц, где какой-то простой загрузчик берет 1 или более исходных файлов в некотором фиксированном порядке и выполняет их в этом порядке, и вы сами по себе для порядок зависимостей. Это называется "программа" сборник. В компиляции программы, вы можете сделать бок-о-бок компиляции (.ТС => а.Яш, б.ТС => б.JS-файлы), или вы могли бы сделать сцепляются компиляции с помощью --out (a.ts + b.ts) = > out.в JS).

на программа компиляция, вы ссылаетесь на свои ссылки, используя ///<reference> теги. Если эти ссылки относятся к исходным файлам (.ts), они будут объединены с выходом при использовании --out, или испущенный как а бок о бок!--8--> файл в противном случае. Если эти ссылки относятся к файлу объявления (.d.ts), вы в основном говорите, что будете получать определения для этих файлов, загруженных через внешний загрузчик (т. е. <script> тег в браузере).

второй-это тип компиляции, который вы бы использовали для node.js или другие среды, которые выполняют асинхронную или идемпотентную загрузку модулей с разрешением зависимостей во время выполнения. Это называется "модуль" сборник. Здесь --module флаг вы переходите к tsc имеет значение, и единственное, что нужно сделать, это бок о бок компиляция, потому что загрузка одного файла в качестве модуля (как правило), как загрузчики модулей в узле.js, etc работают.

на модуль компиляции, вы используете export ключевое слово на объекте верхнего уровня (функция, класс, модуль, интерфейс или var) для управления тем, что доступно для кода, который ссылается на вас с помощью import. Вы должны только когда-нибудь /// <reference> теги, которые указывают на .d.ts файлы объявления, потому что модульные загрузчики времени выполнения не имеют понятия о загрузке голого JS-файла. Вы не будете компилироваться с --out.

вы никогда хотите, чтобы смешивать и сочетать эти режимы компиляции, потому что он просто не будет работать. На самом деле, в 0.8.2.0, tsc просто выдаст ошибку, если вы попытаетесь это сделать.


У меня есть веб-приложение с большим количеством файлов TypeScript. Вот как я решил эту проблему:

  1. создал глобальный _references.файл ts в каталоге ~/Scripts. Этот файл имеет reference path=... для каждого файла ts в веб-проекте.
  2. затем я сгенерировал этот файл, используя шаблон T4, потому что его становилось больно управлять вручную.
  3. кроме того, используя шаблон T4, я заказал ссылки в _references.ТС по данным мои зависимости от TypeScript. например, все ..Основа.файлы TS в верхней части.
  4. кроме того, я создал файл аргумента tsc, который начинается с приложения.JS, за которым следует Список всех файлов ts в проекте. Это также было сгенерировано с помощью T4, и я назвал его app.tsproj.
  5. наконец, я называю tsc @app.tsproj для генерации JavaScript со всеми правильно упорядоченными зависимостями.

_references.шаблон ts T4: https://gist.github.com/danabenson/5224712

app.tsproj T4 шаблон:https://gist.github.com/danabenson/5224718