freeCodeCamp/guide/english/developer-tools/grunt/index.md

2.7 KiB

title
Grunt

Grunt

Grunt is a JavaScript Task Runner you can use to automate repetitive tasks.

Why Use Grunt?

There are many repetitive tasks in web development. For example: compiling, minifying, and copying files. Doing these tasks manually takes a lot of effort and time.

You will make your job easier with Grunt. You only need to configure the tasks through a Gruntfile.

Getting Started

  1. Install npm.
  2. Install Grunt's command line interface (CLI) globally with npm install -g grunt-cli.
  3. List Grunt and the Grunt plugins as devDependencies in a package.json file.
  4. Install Grunt and the Grunt plugins with npm i.
  5. Configure tasks in a Gruntfile.js file.
  6. Run Grunt with grunt.

Example

Below is an example of a package.json and Gruntfile.js to do the following tasks:

  1. Minify HTML files.
  2. Add vendor prefixes and minify CSS file.
  3. Concatenate and minify JavaScript files.
  4. Minify images.

package.json

{
  "name": "project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "latest",
    "grunt-contrib-htmlmin": "latest",
    "grunt-postcss": "latest",
    "autoprefixer": "latest",
    "cssnano": "latest",
    "grunt-contrib-uglify": "latest",
    "grunt-contrib-imagemin": "latest",
  }
}

Gruntfile.js

module.exports = function(grunt) {

  grunt.initConfig({
    htmlmin: {
      options: {
        removeComments: true,
        collapseWhitespace: true
      },
      html: {
        files: [{
          expand: true,
          cwd: "src/",
          src: "**/*.html",
          dest: "dest/"
        }]
      }
    },
    
    postcss: {
      options: {
        processors: [
          require("autoprefixer")(),
          require("cssnano")()
        ]
      },
      css: {
        src: "dest/css/*.css"
      }
    },
    
     uglify: {
      js: {
        files: {
          "dest/js/main.js": "src/js/*.js"
        }
      },
    },
    
    imagemin: {
      img: {
        options: {
          optimizationLevel: 5,
          quality: 75
        },
        files: [{
          expand: true,
          cwd: "src/img/",
          src: "**",
          dest: "dest/img/"
        }]
      }
    },
  });
  
  grunt.loadNpmTasks("grunt-contrib-htmlmin");
  grunt.loadNpmTasks("grunt-postcss");
  grunt.loadNpmTasks("grunt-contrib-uglify");
  grunt.loadNpmTasks("grunt-contrib-imagemin");
  
  grunt.registerTask("default", ["htmlmin", "postcss", "uglify, imagemin"]);
};

More Information:

Grunt documentation: Getting Started