This is part of an ongoing series about building Angular 2 TypeScript applications with Gulp. Start with Part 1, and then read Part 2, Part 3, Part 4, Part 6, Part 7, and Part 8.
Sometimes I like to create a build intended for production servers which does not include source maps. To make that happen, I use a gulp-if plugin to conditionally decide whether to generate the source maps, or not. First, install gulp-if:
Now, import the gulp-if library as part of the gulpfile.js:
Take a look at the build directory:
You'll notice that the maps directory is missing; meaning that the sourcemaps were successfully bypassed when running the cleanBuild. We can use this same approach to perform other actions as part of a build process. In the future, I plan to make changes to the buildProd script to force the Angular application into production mode, instead of development mode by default.
npm install --save-dev gulp-if
You'll see an install screen like this:
var gulpIf = require('gulp-if');
Before we modify the buildTS task, let's add a variable named devMode:
var devMode = true;
This is the variable we will use to determine whether or not to generate the source maps. It is set to true by default. Primarily we will change this variable as part of tasks, not as a configuration option.
Review the buildTS task:
gulp.task("buildTS", ["tslint"], function() {
return gulp.src(typeScriptSource)
.pipe(sourcemaps.init())
.pipe(tsProject())
.pipe(uglify())
.pipe(sourcemaps.write(mapPath))
.pipe(gulp.dest(destinationPath));
});
We want to use gulp-if as part of the two source map statements. First replace the source map init statement:
.pipe(gulpIf(devMode,sourcemaps.init()))
Instead of just calling sourcemaps.init(), we now wrap it in a gulpIf. This will check the devMode variable and conditionally init the source maps.
Also change the sourcemaps.write() pipe:
.pipe(gulpIf(devMode,sourcemaps.write(mapPath)))
With the buildTS task updated, we can now create a task for building a production version of the app. The purpose of this task is to set the devMode value to false; and then run the cleanBuild task:
gulp.task('buildProd', function(){
devMode = false;
gulp.start('cleanBuild')
});
We can use gulp.start() to run the cleanBuild task. Running cleanBuild will delete the build directory, and then run the build task to compile the TypeScript files, move the HTML, and move the JavaScript libraries.
Run the task:
gulp buildProd
You should see this:

