grunt:uglify生成警告后的jshint

时间:2014-01-21 13:12:30

标签: gruntjs jshint uglifyjs2

我在这里搜索,搜索得相当冗长,并且看不到任何明显的东西,但我警告说这是我第一次使用jshint / uglify和grunt。

我有(为了简洁)2个测试JS文件:

(function() {
console.log("I'm in your build, testing your stuff (1)");
})();

(function() {
console.log("I'm in your build, testing your stuff (2)");
})();

我的grunt文件执行了许多构建任务,但基本上我运行jshint两次 - 一次在src上(如果有问题则提前停止)和一次concat / uglify以确保最终文件输出仍然通过。

源代码上的jshint(上图)有效,但jshint post'build'似乎失败了,因为uglify删除了几个分号。

我的grunt文件的相关部分(参考):

jshint: {
        jshintrc: '.jshintrc',
        source: {
            files: {
                src: ['app/common/scripts/**/*.js',
                        'app/games/**/*.js'
                ]
            }
        },
        dist: {
            files: {
                src: [ 'dist/' + targetEnvironment + '/common/scripts/**/*.js',
                        'dist/' + targetEnvironment + '/games/**/*.js'
                ]
            }
        }
    },
concat: {
    scriptsCommon: {
                src: [  'app/common/scripts/*.js',
                ],
                dest: 'dist/' + targetEnvironment + '/common/scripts/common.concat.js',
                nonull: true
            }
        },
uglify: {
            all: {
                files: [
                    {   src: 'dist/' + targetEnvironment + '/common/scripts/common.concat.js',
                        dest: 'dist/' + targetEnvironment + '/common/scripts/common.min.js' },
                ]
            }
        }

我运行的笨拙任务基本上(再次,为示例减少):

    grunt.registerTask('default', [
        'jshint:source',
        'concat:scriptsCommon',
        'uglify:all',
        'jshint:dist'

jshint:source是一种享受,jshint:dist没有,并抱怨丢失分号。

uglify'd脚本(供参考)是:

!function(){"use strict";angular.module("TestingStuffs",[]).controller("TestController",["$http","$log",function(){}]).controller("Test2Controller",["$http","$log",function(){}])}(),function(){console.log("I'm in your build, testing your stuff (1)")}(),function(){console.log("I'm in your build, testing your stuff (2)")}();

正如您所看到的,两个console.log语句都删除了分号 - 看起来很安全。我可以理解为什么uglify会这样做,我也能理解为什么jshint抱怨它。

理想情况下,我想修改uglify以便它留下分号(虽然我可能会从分号警察那里获得愤怒)虽然理想情况下我很乐意看到两者的选项 - 让jshint忽略分号问题,但也让uglify离开。

感谢任何帮助!

干杯, 特里

1 个答案:

答案 0 :(得分:1)

我认为JSHint不应该在uglified / concat输出上运行,而只是输入。 JSHint是一种消除人为错误的语法检查程序,uglify显然会尝试将文件大小降至最低。

来自JSHint.com

  

JSHint是一个社区驱动的工具,用于检测JavaScript代码中的错误和潜在问题,并强制执行您的团队编码约定......此项目的目标是帮助JavaScript开发人员编写复杂的程序,而不必担心错别字和语言问题< / p>

显然,这意味着您必须非常相信uglify任务以及它对您的代码所做的修改。然而,在uglified代码上运行您的单元测试(假设您拥有它们)将增加信心并识别任何问题。