[[oktatas:web:nodejs:gulp|< Gulp]] ====== Gulp és a TypeScript ====== * **Szerző:** Sallai András * Copyright (c) 2021, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Fordítás és másolás ===== Kezdetben csak annyit szeretnék, hogy fordítsa le a .ts kiterjesztésű fájlokat az src könyvtáron belül, és a kész .js kiterjesztésű fájlt másolja a dist nevű könyvtárba. Feltételezzük, hogy a gulp már telepítve van. Telepítsük a gulp-typescript bővítményt, fejlesztéshez: npm install --save-dev gulp-typescript Használat: const { src, dest } = require('gulp'); const ts = require('gulp-typescript'); function streamTS() { return src('src/**/*.ts') .pipe(ts()).js .pipe(dest('dist')); } exports.default = streamTS; ==== Próba ==== Írjunk az src könyvtárban egy app.ts scriptet: class Dolgozo { } Futtassuk a gulp parancsot: gulp Az elkészült app.js tartalma: var Dolgozo = /** @class */ (function () { function Dolgozo() { } return Dolgozo; }()); ===== tsconfig.json figyelése ===== Most állítsuk be, hogy figyelje a tsconfig.json fájlt, ha van ilyen. Generáljunk egy tsconfig.json fájlt: tsc --init Vegyünk fel egy tsProject objektumot: const { src, dest } = require('gulp'); const ts = require('gulp-typescript'); const tsProject = ts.createProject('tsconfig.json'); function streamTS() { return src('src/**/*.ts') .pipe(tsProject()).js .pipe(dest('dist')); } exports.default = streamTS; A .pipe() függvény paramétere most tsProject() és nem ts(). Így figyeli a tsconfig.json fált. Ha visszaírjuk a tsProject() helyett a ts() függvényt, akkor nem fogja figyelembe venni a tsconfig.json fájlt. Most ellenőrizzük, hogy figyelembe veszi-e a tsconfig.json fájlt. A tsc fordító alapértelmezetten nem használja a kimeneti fájlban a strict bejegyzést. Az automatikusan generált tsconfig.json fájlban -- amit a tsc --init parancs generál -- be van állítva a stric használata. Ha futtatjuk a gulp parancsot a generált dist/app.js fájlban kell legyen most már strict bejegyzés. Legyünk biztosak abban, hogy tsconfig.json le van gyártva, majd futtassuk a gulp parancsot: gulp A dist/app.js fájl tartalma, most ilyen kell legyen: "use strict"; var Dolgozo = /** @class */ (function () { function Dolgozo() { } return Dolgozo; }()); A tsconfig.json fájlban beállíthatjuk a es6 szabványt is az alapértelmezett es5 helyett, majd újabb fordítás után nézzük meg a generált app.js fájlt. ===== Minimalizálással ===== Feltételezzük, hogy a gulp és a gulp-typescript már telepítve van. Telepítsük a gulp-uglify és a gulp-rename bővítményeket: npm install --save-dev gulp-uglify npm install --save-dev gulp-rename Használat: const { src, dest } = require('gulp'); const ts = require('gulp-typescript'); const tsProject = ts.createProject('tsconfig.json'); const uglify = require('gulp-uglify'); const rename = require('gulp-rename'); function streamTS() { return src('src/**/*.ts') .pipe(tsProject()).js .pipe(uglify()) .pipe(rename({extname: '.min.js'})) .pipe(dest('dist')); } exports.default = streamTS; ===== ts alkönyvtárban ===== npm install --save-dev gulp npm install --save-dev gulp-typescript npm install --save-dev gulp-rename npm install --save-dev gulp-uglify const { src, dest } = require('gulp'); const ts = require('gulp-typescript'); const rename = require('gulp-rename'); const uglify = require('gulp-uglify'); function streamTS() { return src("src/**/*.ts") .pipe(ts()).js .pipe(uglify()) .pipe(rename({dirname: 'js', extname: '.min.js'})) .pipe(dest('public')); } exports.default = streamTS; ===== Forrás ===== * https://www.npmjs.com/package/gulp-typescript (2021) * https://www.typescriptlang.org/docs/handbook/gulp.html (2021)