gulpでtsconfig.jsonを生成する
Sublime TextやAtom, Visual Studio CodeはTypeScriptの入力補完の機能があり、
正しく動作させるには tsconfig.json
でコンパイラオプション等を指定する必要がある。
コンパイル対象のファイルを指定するにはデフォルト設定 (ルート以下のすべての *.ts
) または
files
プロパティを指定する必要があるのだが、
node.js環境では node_modules
以下に不要な *.ts
が入っているため前者が使用できず、
後者はglobが効かないため tsconfig.json
のメンテナンスが大変面倒くさい。
そのうちglobとかexcludeとかが実装されるんじゃないかと思うが、
当面はgulpから tsconfig.json
を生成することにした。
以下 Gulpfile.js
:
var gulp = require('gulp');
var ts = require('gulp-typescript');
var merge = require('merge2');
var tsconfig = require('@atsushi_suzuki/gulp-tsconfig');
var tsProject = ts.createProject({
noImplicitAny: true,
noLib: true,
target: 'ES5',
module: 'commonjs',
typescript: require('typescript')
});
gulp.task('compile', function () {
var tsResult = gulp.src(['**/*.ts', '!node_modules/**/*'])
.pipe(ts(tsProject));
return merge([
tsResult.dts.pipe(gulp.dest('.')),
tsResult.js.pipe(gulp.dest('.'))
]);
});
gulp.task('tsconfig', function () {
gulp.src(['tsconfig.json', '**/*.ts', '!node_modules/**/*'])
.pipe(tsconfig())
.pipe(gulp.dest('.'));
});
gulp.task('watch', ['tsconfig', 'compile'], function () {
gulp.watch(['tsconfig.json', '**/*.ts', '!node_modules/**/*'], ['tsconfig', 'compile']);
});
gulp.task('default', ['tsconfig', 'compile']);