2014-10-24 2 views
0

Я использую grunt-typescript для создания одного js-файла из набора файлов ts. Это отлично работает, пока я не добавлю оператор import в один из файлов ts.Добавление импорта машинописных файлов не позволяет скомпилировать один файл js

Пример Грунт-машинописный конфигурации

typescript: { 
     server: { 
      src: ["./ts/file1.ts", "./ts/file2.ts"], 
      dest: "./js/out.js", 
      options: { 
       module: 'amd', //or commonjs 
       target: 'es5', //or es3 
       basePath: '', 
       sourcemap: false, 
       declaration: false, 
       ignoreError: false 
      } 
     } 
    } 

Если добавить оператор импорта в верхней части file2.ts например,

import PG = require("pg"); 

Тогда я получаю ошибки, код в File1.ts не могут найти типы, определенные в File2.ts и я получаю неожиданный File2.js генерируется в каталоге/TS игнорирует параметр Dest файла. Импорт, похоже, заставляет его полностью компилировать File2.ts.

Можно ли это ожидать с импортом или как я могу исправить это, чтобы создать ожидаемый одиночный файл js без ошибок компиляции?

ответ

2

Как только вы импортируете модуль AMD или экспортируете извне какого-либо внутреннего модуля, ваш файл будет скомпилирован как модуль AMD. AMD и однофайловая компиляция по своей сути являются разными способами работы и не любят смешиваться. Чтобы прочитать внутренние и внешние модули, проверьте this TypeScript wiki page.

Вы по-прежнему можете импортировать модули AMD с использованием стандартного метода JavaScript, но это неудобно. Например, с помощью файла require.d.ts из DefinitelyTyped:

/// <reference path="require.d.ts"/> 

require(["somemodule"], (SomeModule: namespace.SomeModule) => { 
    // async code called after the module is retrieved 
}); 

Без машинописи import ключевого слова не делает ничего о требуете и оставляет вас самостоятельно.

В качестве альтернативы, я бы порекомендовал вам полный AMD. Если какая-либо из ваших библиотек - AMD, с ней проще работать, и вы можете все еще compile down to a single file, когда пришло время выпуска.