I use Grunt in development stage, but it can also be used to build the finished project for production.

Here is a project example using Grunt to create the build.

List of Grunt plugins:

1. Minify CSS

The plugin grunt-contrib-cssmin is used to minify the CSS files to reduce the files size and concatenate this files into a single file style.min.css to reduce the number of http requests.

"cssmin": {
    "combine": {
        "files": {
            "build/css/style.min.css": [
                "public/lib/bootstrap-css/css/bootstrap.min.css",
                "public/lib/fontawesome/css/font-awesome.min.css",
                "public/css/style.css"
            ]
        }
    }
}

2. Compress JavaScript

The plugin grunt-contrib-uglify is used to compress and concatenate multiple JavaScrit files.

Notice in development stage the file google-analytcis.js is not integrated in index.html page while this file in needed only in production.

"uglify": {
    "dist": {
        "options": {
            "mangle": true
        },
        "files": [
            {
                "build/js/script.min.js": [
                    "public/js/script.js",
                    "public/js/google-analytics.js"
                ]
            }
        ]
    }
}

3. Process HTML file

The plugin grunt-processhtml is used to change the integrated CSS & JavaScript files in index.html

The CSS files are replaced with style.min.css and the JavaScript files with script.min.js file.

Notice that the file livereload.js is used only in development and has to be removed in production.

 

<!-- build:css css/style.min.css -->
<link rel="stylesheet" href="lib/bootstrap-css/css/bootstrap.min.css"/>
<link rel="stylesheet" href="lib/fontawesome/css/font-awesome.min.css"/>
<link rel="stylesheet" href="css/style.css"/>
<!-- /build -->
<!-- build:js js/script.min.js -->
<script src="js/script.js"></script>
<!-- /build -->
<!-- build:remove -->
<script src="http://localhost:35729/livereload.js"></script>
<!-- /build -->

4. Copy files

The plugin grunt-npmcopy is used to copy fontawesome font files and the custom font used in style.css

"npmcopy": {
    "fontawesome": {
        "options": {
            "srcPrefix": ""
        },
        "files": {
            "build/fonts": "public/lib/fontawesome/fonts/*"
        }
    },
    "customfonts": {
        "options": {
            "srcPrefix": ""
        },
        "files": {
            "build/fonts": "public/fonts/*"
        }
    }
}

5. Replace text

The plugin grunt-text-replace can be used to replace text in any files.

In this example snippet I change  any value of example.dev in the file index.html to ismaail.com

"replace": {
    "html": {
        "src": "build/index.html",
        "dest": "build/index.html",
        "replacements": [{
            "from": "example.dev",
            "to": "ismaail.com"
        }]
    }
}

Finale step

To create the build folder, in the project folder run the command grunt build,

now the project is ready for production.