Я использую gulp-typescript для переноса моего кода TypeScript в JavaScript. По сути, я хочу, чтобы для одного файла *.ts
были созданы соответствующие файлы *.js
, *.d.ts
и *.map
.
В задаче компиляции я заметил, что могу транспилировать только с объявлением или транспилировать с картой, но не оба одновременно. Например, наличие 1 задачи компиляции, которая пытается сгенерировать файлы декларации и карты (с файлами JavaScript), как показано ниже, не работает. Следующее будет генерировать файлы JavaScript + map, но не файлы объявлений.
var tsc = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');
var tsProject = tsc.createProject('tsconfig.json');
gulp.task('compile', function () {
var tsProject = tsc.createProject('tsconfig.json');
var tsResult = gulp.src(['src/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(tsProject());
return tsResult.js
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/src'));
});
Мой tsconfig.json
выглядит следующим образом.
{
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
],
"compilerOptions": {
"noImplicitAny": true,
"target": "es6",
"module": "commonjs",
"alwaysStrict": true,
"diagnostics": false,
"listEmittedFiles": false,
"listFiles": false,
"pretty": true,
"declaration": true
}
}
Чтобы обойти эту проблему, на данный момент мне нужно создать 3 задачи gulp:
- один для создания объявлений,
- один для создания сопоставления и
- один, чтобы вызвать два предыдущих.
Эта опция работает, но нежелательна или является лучшей практикой, так как теперь мне нужно дважды скомпилировать, чтобы получить желаемые результаты.
Мои 3 задачи gulp выглядят следующим образом. Обратите внимание, как я теперь сделал tsProject
локальным для функций (сохраняя его глобальным, задача gulp не выполняется).
gulp.task('compile:with:dts', function () {
var tsProject = tsc.createProject('tsconfig.json');
return gulp.src(['src/**/*.ts'])
.pipe(tsProject())
.pipe(gulp.dest('./dist/src'));
});
gulp.task('compile:with:maps', function () {
var tsProject = tsc.createProject('tsconfig.json');
var tsResult = gulp.src(['src/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(tsProject());
return tsResult.js
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/src'));
});
gulp.task('compile', ['compile:with:dts', 'compile:with:maps']);