Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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'
  ]);
};
like image 222
user2953989 Avatar asked Jun 14 '16 09:06

user2953989


4 Answers

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
}
like image 193
Rilke Petrosky Avatar answered Nov 11 '22 17:11

Rilke Petrosky


If you are using any generators give like this

jshint: {
      main: {
        options: {
            jshintrc: '.jshintrc',
            reporterOutput: "" // Empty string inside options
        },
        src: createFolderGlobs('*.js')
      }
    }
like image 23
byteC0de Avatar answered Nov 11 '22 17:11

byteC0de


For me, it was adding reporterOutput with an empty string value in the Gruntfile.js within the config object like:

{
  jshint: {
     options: {
        jshintrc: ".jshintrc",
        reporterOutput: ''
     }
  }
}

that fixed it.

like image 3
mykeels Avatar answered Nov 11 '22 18:11

mykeels


This error is related to the version of jshint library. To solve, change current jshint version for the latest

$ npm install grunt-contrib-jshint@latest --save-dev

Anyhow, change the jshint version in your package.json file manually to 1.1.0. Do not forget to update the project with statement below:

npm install

like image 1
Arthur Silva Avatar answered Nov 11 '22 17:11

Arthur Silva