2014-01-21 4 views
2

Я охотился здесь и довольно длинный поиск в Google, и не вижу ничего очевидного, хотя я предупреждаю, что с этим я впервые работал с jshint/uglify и grunt ,grunt: jshint после uglify генерации предупреждений

У меня есть (ради краткости) 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)"); 
})(); 

мой пехотинец файл делает ряд задач сборки, но в основном я бегу jshint дважды - один раз на src (если раньше возникли проблемы с остановкой), и один раз после всех concat/uglify, чтобы гарантировать, что окончательные выходные файлы все равно пройдут.

jshint на источнике (выше) работает с обработкой, но jshint post 'build', похоже, терпит неудачу, поскольку uglify удалил пару точек с запятой.

уместные части моего файла хрюкать (для исх):

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 работы a treat, 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 так, чтобы он оставил точку с запятой (хотя я мог заработать ire из полиции с запятой за это), хотя в идеале мне бы хотелось увидеть варианты для обоих - получение jshint для игнорирования вопрос о выпуске с запятой, но также получение угасания, чтобы оставить его.

Любая помощь с благодарностью оценили!

Приветствия, Терри

ответ

1

Я не думаю, что JSHint должен быть запущен на изуродованный выходе/Concat, но только на входе. JSHint является синтаксическим контролером для уничтожения человеческой ошибки, и, очевидно, попытка будет уменьшать размер файла до минимума.

От JSHint.com:

JSHint является инструментом сообщества приводом для обнаружения ошибок и потенциальных проблем в коде JavaScript и применять правила кодирования вашей команды ... Цель этого проекта заключается в оказании помощи разработчикам JavaScript написать сложные программы, не беспокоясь о опечатках и языке gotchas

Очевидно, это означает, что вы должны поместить много веры в задание uglify и какие изменения он внесет в ваш код. Однако выполнение ваших модульных тестов (при условии, что они у вас есть) на укрупненном коде повышает доверие и выявляет любые проблемы.

Смежные вопросы