gulp-typescript и опция outFile в tsconfig.json

Я использую gulpfile.js для компиляции моего проекта tsconfig.json следующим образом:

var ts = require('gulp-typescript');

var tsProject = ts.createProject('Modeler/tsconfig.json',
    { typescript: require('typescript') });

gulp.task('build:ts', function () {
    var tsResult = tsProject.src()
        .pipe(ts(tsProject));
    return tsResult.pipe(gulp.dest('wwwroot/app'));
});

Он работает нормально, компилирует мои машинописные файлы и помещает файлы js в папку wwwroot/app.

Проблема возникает тогда, когда я хочу, чтобы компилятор TypeScript выводил один конкатенированный файл, используя свойство outFile

{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "module": "commonjs",
    "outFile": "modeler.js"
  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]  
}

Задача gulp создает пустой выходной файл и создает файлы *.js с содержимым рядом с файлами *.ts.

Что я должен исправить, чтобы создать желаемый выходной файл, не загрязняя мои исходные папки?


person Rem    schedule 18.10.2015    source источник


Ответы (3)


Вы уверены, что в ваших исходниках TypeScript нет внешних модулей?

Я столкнулся с подобным поведением в этом случае. Внешние модули не разрешены при использовании опции outFile, но компилятор не жалуется и выдает пустой файл. Дополнительно внешние модули должны эмитироваться "где-то" (в outDir).

Если проблема не во внешних модулях, использование простого tsc -p . ведет себя так же, как использование gulp-typescript?

person ahz    schedule 18.10.2015
comment
jquery.d.ts в не внешнем модуле - это не проблема. Вопрос в том, используете ли вы ключевое слово export (в .ts, а не .d.ts). См. это. Больше подробностей. - person ahz; 18.10.2015
comment
Я вижу, я не должен использовать модули, тогда все работает нормально - person Rem; 18.10.2015

Я бы рекомендовал использовать для этой цели gulp-concat. Пакет Gulp, который выполняет более одной функции, противоречит принципам Gulp.

var concat = require('gulp-concat');

gulp.task('scripts', function() {
  return gulp.src('./lib/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./dist/'));
});
person Muhammad Rehan Saeed    schedule 19.10.2015

Я считаю, что для этого предназначена опция --outDir компилятора TypeScript. См. https://github.com/Microsoft/TypeScript/wiki/Compiler-Options и, пожалуйста, ознакомьтесь с gulp-typescript документацией, в которой указано:

outDir (строка) — переместить вывод в другой (виртуальный) каталог. Обратите внимание, что вам по-прежнему нужен gulp.dest для записи вывода на диск.

person Martin Vseticka    schedule 18.10.2015
comment
Но как outDir помогает мне выводить один файл?! - person Rem; 18.10.2015
comment
Ваш outFile должен быть отправлен, как и раньше, и только временные файлы .js должны быть отправлены в outDir. Так что outDir должен помочь вам избавиться от этих загрязняющих .js файлов. - person Martin Vseticka; 18.10.2015
comment
Но моя проблема в том, что мой выходной файл генерируется пустым! мне тоже нужно с ним что-то изменить - person Rem; 18.10.2015