BENBUN Coder
BENBUN Coder

Reputation: 4881

Grunt file does not complete

I have recently discovered grunt as it is used within an opensource project I have started to work on. Having not worked with grunt before I am struggling to see how it works, or in my case doesn't.

The grunt file is supplied by the project and I assume it works for everyone else. I have installed grunt and the necessary grunt modules have all installed in the "Node_modules" directory.

When running the grunt file the first process performs a number of concatenations and this seems to work fine. The concatenated files are created.

All of the other steps do not seem to execute. The files they are intended to create are not created. There is no error message displayed on the console when grunt is executed.

I'm stumped - anyone have any clues what might be the problem.

The grunt file is :

    /*global module:false*/
module.exports = function(grunt) {
  // Project configuration...
  grunt.initConfig({
    manifest: grunt.file.readJSON('chrome/manifest.json'),

    concat: {
      dist: {
        src: ['chrome/js/requester/**/*.js'],
        dest: 'chrome/js/requester.js'
      },
      requester_html: {
        src: [
        'chrome/html/requester/header.html',
        'chrome/html/requester/sidebar.html',
        'chrome/html/requester/main.html',
        'chrome/html/requester/loggers/*.html',
        'chrome/html/requester/modals/*.html',
        'chrome/html/requester/footer.html'
        ],
        dest: 'chrome/requester.html'
      },
      requester_tester: {
        src: [
        'chrome/html/requester/header.html',
        'chrome/html/requester/sidebar.html',
        'chrome/html/requester/main.html',
        'chrome/html/requester/modals/*.html',
        'chrome/html/requester/loggers/*.html',
        'chrome/html/requester/footer.html',
        'chrome/html/requester/tester.html'
        ],
        dest: 'chrome/tester.html'
      }
    },

    mindirect: {
      dist: {
        src: ['chrome/js/requester.js'],
        dest: 'chrome/js/requester.min.js'
      }
    },

    watch: {
      requester_templates: {
        files: ['chrome/html/requester/templates/*'],
        tasks: ['handlebars'],
        options: {
          livereload: true
        }
      },

      requester_js: {
        files: ['chrome/js/requester/**/*.js'],
        tasks: ['concat:dist'],
        options: {
          livereload: true
        }
      },

      requester_html: {
        files: ['chrome/html/requester/*', 'chrome/html/requester/modals/*', 'chrome/html/requester/loggers/*'],
        tasks: ['concat:requester_html', 'concat:requester_tester'],
        options: {
          livereload: true
        }
      },

      requester_css: {
        files: ['chrome/css/**/*.scss'],
        tasks: ['sass'],
        options: {
          livereload: true
        }
      }
    },

    jshint: {
      options: {
        curly: true,
        eqeqeq: true,
        immed: true,
        latedef: true,
        newcap: true,
        noarg: true,
        sub: true,
        undef: true,
        boss: true,
        eqnull: true,
        browser: true
      },
      globals: {
        jQuery: true
      }
    },

    handlebars: {
      compile: {
        options: {
          partialsUseNamespace: true,
          namespace: 'Handlebars.templates',
          processPartialName: function(filePath) {
            var pieces = filePath.split("/");
            var name = pieces[pieces.length - 1].split(".")[0];
            return name;
          },
          processName: function(filePath) {
            var pieces = filePath.split("/");
            var name = pieces[pieces.length - 1].split(".")[0];
            return name;
          }
        },
        files: {
          "chrome/html/requester/templates.js": "chrome/html/requester/templates/*"
        }
      }
    },

    sass: {
      dist: {
        files: {
          'chrome/css/requester/styles.css': 'chrome/css/requester/styles.scss'
        }
      }
    },

    compress: {
      main: {
          options: {
            archive: 'releases/v<%= manifest.version %>.zip'
          },
          files: [
            {src: ['chrome/**', '!chrome/tests/**', '!chrome/manifest_key.json', '!chrome/tester.html'], dest: '/'}, // includes files in path and its subdirs
          ]
        }
    }
  });

  // These plugins provide necessary tasks.
  grunt.loadNpmTasks('grunt-contrib-handlebars');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-mindirect');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-compress');

  // Default task.
  grunt.registerTask('default', ['jshint', 'concat']);
  grunt.registerTask('package', ['concat', 'handlebars', 'sass', 'compress']);

};

The output from the console is as follows :

Running "jshint:globals" (jshint) task
>> 0 files lint free.

Running "concat:dist" (concat) task
File "chrome/js/requester.js" created.

Running "concat:requester_html" (concat) task
File "chrome/requester.html" created.

Running "concat:requester_tester" (concat) task
File "chrome/tester.html" created.

Done, without errors.

Upvotes: 0

Views: 375

Answers (3)

Ricardo Memoria
Ricardo Memoria

Reputation: 483

As Louis said, you have to specify the right task to run.

But you can also create or modify the tasks you have in order to make it simpler. In your example you may include package in the default task. Because concat task is already executed inside package, you may just replace it in the default task:

grunt.registerTask('default', ['jshint', 'package']);
grunt.registerTask('package', ['concat', 'handlebars', 'sass', 'compress']);

and, in order to build your site, just type

grunt

both jshint and package tasks will be executed

Upvotes: 0

Louis
Louis

Reputation: 151380

Given that the tasks are defined like this:

grunt.registerTask('default', ['jshint', 'concat']);
grunt.registerTask('package', ['concat', 'handlebars', 'sass', 'compress']);

the output you show is what you'd expect if you are running grunt without a task name. It runs the jshint and concat tasks.

If you want to run the tasks associated with package, then you have to run grunt package to run those tasks.

Upvotes: 1

BENBUN Coder
BENBUN Coder

Reputation: 4881

It looks like I did not understand "tasks" within grunt.

Instead of executing "grunt" which runs the "default" tasks, I had to execute "grunt package" which runs the tasks that I was interested in.

Upvotes: 0

Related Questions