6

当我尝试使用 Grunt 进行编译时出现此错误。我以前没怎么用过它,但我似乎只在这个项目中遇到了这个错误,它适用于我服务器上的其他项目。

运行“jshint:main”(jshint)任务警告:路径必须是字符串。收到 null 使用 --force 继续。

由于警告而中止。

咕噜声文件

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'
  ]);
};
4

4 回答 4

16

reporterOutput必须是字符串。当省略时,它被视为一个null.

在 Gruntfile.js 中为其提供一个空字符串

jshint: {
    main: 'script/dist/main.js',
    reporterOutput: '' // <-- Add an empty String here
}
于 2016-07-16T16:42:50.077 回答
5

如果您使用任何生成器,请像这样

jshint: {
      main: {
        options: {
            jshintrc: '.jshintrc',
            reporterOutput: "" // Empty string inside options
        },
        src: createFolderGlobs('*.js')
      }
    }
于 2017-04-08T03:24:33.057 回答
3

对我来说,它在配置对象中添加reporterOutput了一个空字符串值,例如:Gruntfile.js

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

解决了它。

于 2017-10-27T10:34:13.313 回答
1

此错误与jshint库的版本有关。要解决,请将当前 jshint 版本更改为最新

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

无论如何,手动将文件jshint中的版本更改为 1.1.0。package.json不要忘记使用以下语句更新项目:

npm install

于 2018-05-18T14:11:38.487 回答