Search code examples
gruntjsyeomanyeoman-generator

yeoman, grunt - how add a banner to my generated files


I created a mobile application with the yeoman mobile-generator.
I'am very new to grunt and yeoman, but it's really awesome stuff!
Does anyone know what I have to do add a banner to my generated files?

   meta: {
        version: '0.1.0',
        banner: '/*! PROJECT_NAME - v<%= meta.version %> - ' +
            '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
            '* http://PROJECT_WEBSITE/\n' +
            '* Copyright (c) <%= grunt.template.today("yyyy") %> ' +
            'MyName; Licensed MIT */'
    },

Where I have to use this. I have tried something like this, but does not affect.

    usemin: {
        options: {
            dirs: ['<%= yeoman.dist %>']
        },
        html: ['<%= yeoman.dist %>/{,*/}*.html'],
        css: ['<banner:meta.banner>', '<%= yeoman.dist %>/styles/{,*/}*.css']
    },

...

    cssmin: {
        dist: {
            files: {
                '<%= yeoman.dist %>/styles/main.css': [
                    '<banner:meta.banner>', 
                    '.tmp/styles/{,*/}*.css',
                    '<%= yeoman.app %>/styles/{,*/}*.css'
                ]
            }
        }
    },

Solution

  • Banners go in the options object:

    cssmin: {
        dist: {
            options: {
                banner: '<%= meta.banner %>'
            },
            files: {
                '<%= yeoman.dist %>/styles/main.css': [
                    '.tmp/styles/{,*/}*.css',
                    '<%= yeoman.app %>/styles/{,*/}*.css'
                ]
            }
        }
    }
    

    Hat tip: I'd also use the metadata in package.json, that way you save duplicating it in your Gruntfile, and you can also reuse that banner config for other projects without having to change it.

    grunt.initConfig({
        // pkg: grunt.file.read('package.json'),
        pkg: grunt.file.readJSON('package.json'),
        banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
                '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
                '* http://<%= pkg.homepage %>/\n' +
                '* Copyright (c) <%= grunt.template.today("yyyy") %> ' +
                '<%= pkg.author.name %>; Licensed MIT */',
        cssmin: {
            dist: {
                options: {
                    banner: '<%= banner %>'
                },
                files: {
                    '<%= yeoman.dist %>/styles/main.css': [
                        '.tmp/styles/{,*/}*.css',
                        '<%= yeoman.app %>/styles/{,*/}*.css'
                    ]
                }
            }
        }
        // rest of your config...
    });
    

    And in package.json:

    {
        "name":                         "project name",
        "version":                      "0.1.0",
        "homepage":                     "https://stackoverflow.com",
        "author": {
            "name":                     "your name",
            "email":                    "your email",
            "url":                      "your website"
        }
        // devDependencies, etc
    }