Grunt Warning: Path must be a string. Received a null

user2953989 picture user2953989 · Jun 14, 2016 · Viewed 10k times · Source

I'm getting this error when I try to compile with Grunt. I haven't used it much before but I seem to only be getting this error with this project and it works fine for other projects on my server.

Running "jshint:main" (jshint) task Warning: Path must be a string. Received null Use --force to continue.

Aborted due to warnings.

Grunt file

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    uglify: {

      options: {
        mangle: false
      },

      target: {
        files: {
          'script/dist/main.min.js': 'script/dist/main.js'
        }
      },

      build: {
        files: {
          'script/dist/build.min.js': 'script/dist/build.min.js'
        }
      }

    },

    concat: {
      options: {
        stripBanners: true,
        banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
          '<%= grunt.template.today("yyyy-mm-dd") %> */',
      },

      srcJS: {
        src: ['script/src/menu.js',
          'script/src/custom_plugins.js',
          'script/src/banner.js',
          'script/src/latestNews.js',
          'script/src/officers.js',
          'script/src/eventsCalendar.js',
          'script/src/combinedSocialMedia.js',
          'script/src/haveYourSay.js',
          'script/src/photoGallery.js',
          'script/src/countdown.js'
        ],
        dest: 'script/dist/main.js'
      },

      css: {
        src: ['style/libs/bootstrap.min.css',
          'style/libs/bootstrap-theme.min.css',
          'style/src/css/*'
        ],
        dest: 'style/dist/build.min.css'
      },

      build: {
        src: ['script/libs/jquery.easing.min.js',
          'script/dist/main.js',
          'script/libs/bootstrap.min.js',
          'script/libs/velocity.min.js',
          'script/libs/date.js',
          'script/libs/jquery.timeago.js',
          'script/libs/owl.carousel.min.js'
        ],
        dest: 'script/dist/build.min.js'
      }

    },

    jshint: {

      main: 'script/dist/main.js'

    },

    watch: {

      js: {
        files: 'script/src/*',
        tasks: ['concat:srcJS', 'uglify:target', 'jshint:main', 'copy:js']
      },

      css: {
        files: 'style/src/css/*',
        tasks: ['copy:css']
      },

      less: {
        files: 'style/src/less/*',
        tasks: ['less', 'copy:css']
      },

      html: {
        files: '*.html',
        tasks: ['validation', 'bootlint']
      }

    },

    clean: {
      js: [
        'script/dist/main.min.js',
        'dist/build.min.js',
        'dist/build.min.css'
      ]
    },

    copy: {
      css: {
        files: [

          {
            expand: true,
            'src': 'style/src/css/main.css',
            'dest': 'style/dist/',
            flatten: true,
            rename: function(dest, src) {
              return dest + src.replace('main', 'build.min');
            }
          },

          {
            expand: true,
            'src': 'style/dist/build.min.css',
            'dest': 'dist/',
            flatten: true
          },

        ]
      },

      js: {
        files: [{
          expand: true,
          'src': 'script/dist/build.min.js',
          'dest': 'dist/',
          flatten: true
        }]
      }
    },

    validation: {
      options: {
        reset: grunt.option('reset') || false,
        stoponerror: true,
        relaxerror: ['Bad value X-UA-Compatible for attribute http-equiv on element meta.'] //ignores these errors
      },
      files: {
        src: ['homepage.html']
      }
    },

    bootlint: {
      options: {
        stoponerror: false,
        relaxerror: ['E001', 'E003', 'E031', 'W001', 'W002', 'W003', 'W005', 'W007', 'W009', 'E013']
      },
      files: ['homepage.html'],
    },

    less: {
      build: {
        options: {
          paths: ["style/src/less"],
          cleancss: true,
          compress: true
        },
        files: {
          "style/src/css/main.css": "style/src/less/main.less"
        }
      }
    }

  });

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-copy');
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-contrib-less');
  grunt.loadNpmTasks('grunt-html-validation');
  grunt.loadNpmTasks('grunt-bootlint');

  // Default task(s).
  //grunt.registerTask('default', ['concat:srcJS','concat:css','uglify','jshint:main']);
  grunt.registerTask('default', [
    'validation',
    'bootlint',
    'concat:srcJS',
    'jshint:main',
    'uglify:target',
    'clean',
    'concat:build',
    'uglify:build',
    'less',
    'copy'
  ]);
};

Answer

Rilke Petrosky picture Rilke Petrosky · Jul 16, 2016

The reporterOutput must be a string. When omitted it is taken as a null.

Provide an empty string for it in your Gruntfile.js

jshint: {
    main: 'script/dist/main.js',
    reporterOutput: '' // <-- Add an empty String here
}