2016-11-01 1 views
0

У меня есть задача gulp, которая отвечает за преобразование .ts-файлов в заданное местоположение и выплевывание .js в другом заданном месте.gulp-typescript компилирует все .ts-файлы не только из определенного места

Проблема, с которой я сталкиваюсь, заключается в том, что она не только принимает .ts и конвертируется в .js из данного места, перед отправкой в ​​пункт назначения, но также делает то же самое для всех в родительских и дочерних папках.

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

root 
|__dist 
| 
|__source 
| |__bot 
| |__logon 

Вот упрощенная версия моего gulpfile.js:

var gulp = require("gulp"), 
    ts = require("gulp-typescript"); 

var paths = { 
    botScripts: 'source/bot/*.ts', 
    releaseBot: 'dist/bot' 
}; 

// Create typescript project 
var tsBotProject = ts.createProject('tsconfig.json'); 

// Create the tasks 
gulp.task('botscripts', function() { 

    var tsResult = tsBotProject.src(paths.botScripts) 
    .pipe(tsBotProject()); 

    return tsResult.js.pipe(gulp.dest(paths.releaseBot)); 
}); 

Вот мой tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs" 
    }, 
    "exclude": [ 
     "node_modules" 
    ] 
} 

Как я уже сказал, он просто переносится на .js, но в итоге я получаю всех файлов файлов typscript независимо от их местонахождения, переданных в .js и скопированных в одну и ту же структуру папок при dist:

root 
|__dist 
| |__bot 
| | |__*.js 
| |__logon 
|  |__*.js 
| 
|__source 
| |__bot 
| |__logon 

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

ответ

2

tsBotProject.src() не принимает никаких аргументов. Вы пытаетесь передать его paths.botScripts, но этот аргумент просто игнорируется. Вместо этого tsBotProject.src() испускает именно те файлы, которые вы указали в своем tsconfig.json. В вашем случае это все, кроме node_modules.

У вас есть два варианта:

Вариант 1: Вы можете использовать tsBotProject.src() в вашем gulpfile.js так:

var tsResult = tsBotProject.src() 
    .pipe(tsBotProject()); 

Для того, чтобы это работало вам также нужно добавить include недвижимость ваш tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs" 
    }, 
    "include": [ 
     "source/bot/*.ts" 
    ], 
    "exclude": [ 
     "node_modules" 
    ] 
} 

Вариант 2: Использование gulp.src() вместо tsBotProject.src() в вашем gulpfile.js:

var tsResult = gulp.src(paths.botScripts) 
    .pipe(tsBotProject()); 
+0

Привет Sven - спасибо за объяснение. Принимая это во внимание и снова посмотрев на мой gulpfile.js, поведение имеет смысл. Используя мой текущий подход, мне нужно будет создать новый файл tsproject.json для каждой группы файлов, которые я бы хотел переместить, и это просто не имеет смысла. Итак, что я сделал, это вариант 2, и это работает отлично, предполагая, что он по-прежнему соблюдает настройки в настройках tsBotProject (tsconfig.json). Еще раз спасибо! –

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