2015-12-08 5 views
3

У меня есть простой привет мир файл с именем test.ts со следующим содержанием:TSC из создания пустого выходной_файла

export class Hello { 
    constructor() { 
    console.log("hello world!"); 
    } 
} 

Когда я запускаю команду tsc test.ts --module amd --out bla.js, test.js создается файл с правильным содержанием, но пустой bla.js файл также создается.

Я ожидал, что содержимое test.ts и любые зависимости будут скомпилированы в bla.js. Что вызывает такое поведение?

+0

с помощью '--out' может нанести вред в долгосрочной перспективе: https://github.com/TypeStrong/atom-typescript/blob/master/docs/ out.md – basarat

ответ

4

Параметр --out говорит tsc к

Concatenate и испускают выход в один файл.

... но вы определяете модуль . Модули не предназначены для конкатенированных файлов. Итак, tsc создает конкатенированный файл всего вашего немодульного кода (у вас его нет, поэтому bla.js пуст) и файл модуля (test.js), содержащий ваш модуль test.

Вы можете подтвердить это сами, добавив в командную строку второй файл .ts, который не определяет модуль. Вы найдете переведенную версию этого кода в bla.js, а ваш модуль - в test.js. Если вы добавите еще один файл .ts, который определяет второй модуль, вы найдете его в другом файле .js с именем его источника .ts.

Так, например, у вас есть

  • Module1.ts определения модуля
  • Module2.ts определения другого модуля
  • Stuff.ts определяющего не-модуль StuFF
  • MoreStuff.ts определение более не-модуль материал

... и вы сделали это:

 
tsc Module1.ts Module2.ts Stuff.ts MoreStuff.ts --out combined.js --module amd 

Вы бы в конечном итоге с:

  • Module1.js содержащий transpiled JavaScript для Module1.
  • Module2.js содержит сгенерированный JavaScript для Module2.
  • combined.js содержащий transpiled JavaScript из Stuff.ts и MoreStuff.ts
+1

Спасибо, это решило проблему. Это означает, что я должен ссылаться на других с помощью /// ', но это решает проблему. –

+2

@JamesMonger: ...или не определяйте их как модули, так как вы комбинируете все вместе. –

+1

Итак, если мы используем модули, возможно ли объединить файлы в один файл с помощью 'tsc'? Или мы должны использовать что-то вроде [Webpack] (https://webpack.github.io/)? – rinogo

Смежные вопросы