Grunt vs Gulp, which 'G' to choose?

As soon as you started feeling comfortable with all the nasty configurations of Grunt and included it as your primary build tool, a new boy has landed in town named Gulp.

In this post, we will have a brief look at the postives and negatives of each of the build system.

Gulp has already became favorite of many developers. Defined as the The streaming build system, if you are familiar with Node.js and how streams work then you should feel right at home with Gulp.

Gulp has already proved to be faster for many developers when compared to Grunt for similar tasks. So lets first see how the Gulp configuration file looks in comparision to Grunt.

//Gruntfile.js
grunt.initConfig({
    uglify: {
        pkg: grunt.file.readJSON('package.json'),
        options: {
            banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
          },
          build: {
            src: 'src/<%= pkg.name %>.js',
            dest: 'build/<%= pkg.name %>.min.js'
          }
    }
});
grunt.registerTask('default', ['uglify'])

Now lets see how can we write this kind of (uglify) task in Gulp:

//Gulpfile.js
gulp.task('compress', function() {
  gulp.src('lib/*.js')
      .pipe(uglify())
      .pipe(gulp.dest('dist'))
});

As we can already see, how much simpler the configuration file looks in case of Gulp and how complicated the Gruntfile looks even for a developer to understand at first.

One of the reasons Gulp performs better is because its less I/O intensive and does most of the operations in-memory, all through streams. If you have used Node.js, then my guess would be that you are familiar on how streams work and that would work to your advantage when using Gulp.

In case of Grunt, it needs an intermediate .tmp directory where it dumps in all the files being processed before finally adding them to their destinations. In turn, additonal I/O is required in case of Grunt.

But Grunt is already being used to do much more complex tasks rather then just ugliy and has great community support with tons of plugins available on npm, this is the thing which is lacking in case of Gulp at the moment.

Which 'G' to use ?

Finally, the question comes which build system to use. If i have to tell my choice, then i have liked Gulp much more, but that maybe because i have got a good hold of Node.js and particularly like the writing style.

On the other hand, being honest, the choice is more dependent on what you like, coding or configurations? If the answer is latter then you would love working with Grunt else Gulp is all for you.

comments powered by Disqus