【问题标题】:grunt: jshint after uglify generating warningsgrunt: uglify 生成警告后的 jshint
【发布时间】:2014-01-21 13:12:30
【问题描述】:

我在这里搜索,并进行了相当长的谷歌搜索,但看不到任何明显的东西,但我警告说这是我第一次使用 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 任务本质上是(再次,以示例为例):

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

jshint:source 很好用,jshint:dist 不行,并抱怨缺少分号。

丑化的脚本(供参考)是:

!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 忽略分号问题,但也会变得丑陋以将其留在里面。

感谢任何帮助!

干杯, 特里

【问题讨论】:

    标签: gruntjs jshint uglifyjs2


    【解决方案1】:

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

    来自JSHint.com

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多