Search code examples
gruntjssource-mapsgrunt-contrib-concatgrunt-contrib-uglify

Grunt concat + uglify with sourcemaps


I use concat to merge JS files into one file and uglify to minimize the JavaScript. How can I create a sourcemaps file that uses the source JS files?

My current gruntfile:

concat: {
    options: {
        // define a string to put between each file in the concatenated output
        separator: ';'
    },
    dist: {
        // the files to concatenate
        src: ['<%= config.src %>/js/**/*.js'],
        // the location of the resulting JS file
         dest: '<%= config.dist %>/js/main.js'
    }
},

uglify: {
    dist: {
        files: {
            '<%= config.dist %>/js/main.min.js': ['<%= concat.dist.dest %>']
        }
    }
},

Solution

  • You need to enable source maps on both the concat and uglify tasks, and you must specify the sourceMapIn option for the uglify task.

    Here's a sample grunt config:

    concat : {
      options : {
        sourceMap :true
      },
      dist : {
        src  : ['www/js/**/*.js'],
        dest : '.tmp/main.js'
      }
    },
    uglify : {
      options : {
        sourceMap : true,
        sourceMapIncludeSources : true,
        sourceMapIn : '.tmp/main.js.map'
      },
      dist : {
        src  : '<%= concat.dist.dest %>',
        dest : 'www/main.min.js'
      }
    }