Должен ли я использовать проверку JSLint или JSHint JavaScript?


в настоящее время я проверяю свой JavaScript против JSLint и добиваюсь прогресса, это помогает мне писать лучший JavaScript - в частности, в работе с библиотекой Jquery.

Я сейчас наткнулся JSHint, форк JSLint.
Поэтому мне интересно, для веб-приложений, которые очень сильно управляются JavaScript, что является лучшим или наиболее применимым инструментом проверки для работы с:

  • JSLint или JSHint?

Я хочу решить сейчас о механизме проверки и двигаться вперед, использовать это для проверки на стороне клиента.

а разница между jshint и jslint? Пожалуйста, объясните в одном примере javascript.

ссылки:

  1. jshint- http://www.jshint.com/

  2. jslint- http://jslint.com/

8 437

8 ответов:

[EDIT]
Этот ответ был отредактирован. Я оставляю исходный ответ ниже для контекста (иначе комментарии не имели бы смысла).

когда этот вопрос был изначально спросил, JSLint был основным инструментом анализа для JavaScript. JSHint был новой вилкой JSLint, но еще не сильно отличался от оригинала.

С тех пор JSLint остается довольно статичным, в то время как JSHint сильно изменился - он выбросил многие из Более антагонистические правила JSLint добавили целую кучу новых правил и, как правило, стали более гибкими. Кроме того, теперь доступен еще один инструмент ESLint, который является еще более гибким и имеет больше вариантов правил.

в моем первоначальном ответе я сказал, что вы не должны заставлять себя придерживаться правил JSLint; до тех пор, пока вы понимаете, почему он бросает предупреждение, вы можете принять решение о том, следует ли изменить код для разрешения предупреждения или не.

С ультра-строгим набором правил JSLint с 2011 года это был разумный совет - я видел очень мало наборов кодов JavaScript, которые могли бы пройти тест JSLint. Однако с более прагматичными правилами, доступными в современных инструментах JSHint и ESLint, гораздо более реалистичным предложением является попытка заставить ваш код проходить через них с нулевыми предупреждениями.

иногда могут быть случаи, когда Линтер будет жаловаться на то, что вы сделали намеренно -- например, вы знаете, что вы всегда должны использовать === но только в этот раз у вас есть хорошая причина, чтобы использовать ==. Но даже тогда, с ESLint у вас есть возможность указать eslint-disable вокруг рассматриваемой строки, чтобы вы все еще могли пройти тест lint с нулевыми предупреждениями, а остальная часть вашего кода подчинялась правилу. (только не делайте этого слишком часто!)


[ОРИГИНАЛЬНЫЙ ОТВЕТ СЛЕДУЕТ]

обязательно используйте JSLint. Но не зацикливайтесь на результатах и на исправлении всего, о чем он предупреждает. Это поможет вам улучшить свой код, и это поможет вам найти потенциальные ошибки, но не все, на что жалуется JSLint, оказывается реальной проблемой, поэтому не чувствуйте, что вам нужно завершить процесс с нулевыми предупреждениями.

практически любой код Javascript с любой значительной длиной или сложностью будет выдавать предупреждения в JSLint, независимо от того, насколько хорошо он написан. Если вы мне не верите, попробуйте запуск некоторых популярных библиотек, таких как JQuery через него.

некоторые предупреждения JSLint более ценны, чем другие: узнайте, какие из них следует остерегаться, а какие менее важны. Каждое предупреждение должно быть рассмотрено, но не чувствуйте себя обязанным исправлять свой код, чтобы очистить любое данное предупреждение; совершенно нормально смотреть на код и решать, что вы довольны им; бывают случаи, когда вещи, которые JSlint не нравится, на самом деле правильны.

tl; dr takeaway:

Если вы ищете очень высокий стандарт для себя или команды, JSLint. Но это не обязательно стандарт, просто стандарт, некоторые из которых догматически приходят к нам от Бога javascript по имени Дуг Крокфорд. Если вы хотите быть немного более гибкими или иметь в своей команде несколько старых профессионалов, которые не покупают мнения JSLint или регулярно переходят между JS и другими языками семейства C, попробуйте JSHint.

текст:

рассуждение за вилкой объясняет довольно хорошо, почему JSHint существует:

http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/

поэтому я предполагаю, что идея заключается в том, что она "управляется сообществом", а не Крокфордом. В практичности JSHint, как правило, немного более снисходителен (или, по крайней мере, настраиваемый или агностический) на нескольких стилистических и второстепенных синтаксических "мнениях", что JSLint является сторонником.

например, если вы считаете, что и A, и B ниже хороши, или если вы хотите написать код с одним или несколькими аспектами A, которые недоступны в B, JSHint для вас. Если вы думаете, что B-единственный правильный вариант... JSLint. Я уверен, что есть и другие различия, но это подчеркивает несколько.

A) передает JSHint из коробки-не удается JSLint

(function() {
  "use strict";
  var x=0, y=2;
  function add(val1, val2){
    return val1 + val2;
  }
  var z;
  for (var i=0; i<2; i++){
    z = add(y, x+i);
  }
})();

B) проходит как JSHint, так и JSLint

(function () {
    "use strict";
    var x = 0, y = 2, i, z;
    function add(val1, val2) {
       return val1 + val2;
    }
    for (i = 0; i < 2; i += 1) {
        z = add(y, x + i);
    }
}());

лично я нахожу код JSLint очень приятным для просмотра, и единственные жесткие функции, с которыми я не согласен, - это его ненависть к более чем одному объявлению var в функции и for-loop var i = 0 декларации, и некоторые из принудительных пробелов для объявлений функций.

некоторые из пробелов, которые JSLint применяет, я считаю, что нет обязательно плохо, но не синхронизировано с некоторыми довольно стандартными соглашениями о пробелах для других языков в семействе (C, Java, Python и т. д...), которые часто следуют в качестве соглашений в Javascript, а также. Поскольку я пишу на разных из этих языков в течение дня и работаю с членами команды, которым не нравятся пробелы в стиле Lint в нашем коде, я нахожу JSHint хорошим балансом. Он ловит вещи, которые являются законной ошибкой или действительно плохой формой, но не лает на меня, как JSLint (иногда, таким образом, я не могу отключить) для стилистических мнений или синтаксических придирок, которые мне не нравятся.

многие хорошие библиотеки не Lint'table, что для меня демонстрирует, что есть некоторая правда в том, что некоторые из JSLint просто просто нажимают 1 версию "хорошего кода" (что, действительно, хороший код). Но опять же, те же библиотеки (или другие хорошие), вероятно, тоже не намекают, так что, touché.

есть еще зрелые и активно развивается "игрок" на javascript linting front -ESLint:

ESLint является инструментом для выявления и представления закономерностей, обнаруженных в Код ECMAScript / JavaScript. Во многом он похож на JSLint и JSHint с несколькими исключениями:

  • ESLint использует Esprima для синтаксического анализа JavaScript.
  • ESLint использует AST для оценки шаблонов в коде.
  • ESLint вполне pluggable, каждое единственное правило-это плагин и вы можете добавить больше во время выполнения.

что действительно важно здесь, так это то, что это расширяемый с помощью пользовательских плагинов / правил. Есть уже несколько плагинов, написанных для разных целей. Среди другие есть:

и, конечно же, вы можете использовать свой инструмент сборки по выбору для запуска ESLint:

У меня был тот же вопрос пару недель назад и оценивая как JSLint и JSHint.

вопреки ответам на этот вопрос, мой вывод не был:

обязательно используйте JSLint.

или:

Если вы ищете очень высокий стандарт для себя или команды, JSLint.

Как вы можете настроить почти те же правила в JSHint, что и в JSLint. Поэтому я бы сказал, что нет никакой разницы в правилах, которые вы могли бы достичь.

таким образом, причины для выбора одного над другим являются скорее политическими, чем техническими.

мы, наконец, решили пойти с JSHint по следующим причинам:

  • кажется, более настраивается, что JSLint.
  • выглядит определенно более управляемым сообществом, а не одним человеком-шоу (независимо от того, насколько круто Человек есть).
  • JSHint соответствует нашему стилю кода OOTB лучше, чем JSLint.

Я бы сделал третье предложение, Компилятор Закрытия Google (а также Закрытие Линтер). Вы можете попробовать его в интернете здесь.

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

предисловие: Ну, это быстро обострилось. Но решил довести дело до конца. Пусть этот ответ будет полезен вам и другим читателям.

I got a bit carried away here

Подсказки Кода

в то время как JSLint и JSHint являются хорошими инструментами для использования, на протяжении многих лет я пришел, чтобы оценить то, что мой друг @ugly_syntax вызовы:

меньшее пространство для дизайна.

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

поэтому мой текущий любимый стиль кода zero-config JS:

StandardJS.

обновление:

поток значительно улучшилась. С его помощью вы можно добавить типы в ваш JS с помощью поможет вам предотвратить много Жуков. Но он также может оставаться в стороне от вашего пути, например при подключении нетипизированный JS и. Дайте ему попробовать!

Quickstart / TL; DR

добавить standard как зависимость от вашего проекта

npm install --save standard

затем в package.json добавьте следующий тестовый скрипт:

"scripts": {
    "test": "node_modules/.bin/standard && echo put further tests here"
},

для вывода цветовой при разработке, npm install --global snazzy и запустить его вместо npm test.

Примечание: проверка типа по сравнению с эвристикой

мой друг при упоминании дизайна пространства упоминается Вязовая и я призываю вас дайте этому языку попробовать.

почему? JS на самом деле вдохновлен LISP, который является специальным классом языков, который бывает untyped. Язык как вяз или Purescript are набрал функциональные языки программирования.

введите ограничение свободы для того, чтобы компилятор мог проверять и направлять вас, когда вы в конечном итоге нарушаете язык или правила вашей собственной программы; независимо от размера (LOC) вашего программа.

недавно у нас был младший коллега, который дважды реализовал реактивный интерфейс: один раз в Elm, один раз в React; посмотрите, чтобы получить некоторое представление о том, о чем я говорю.

сравнить Main.elm (наборная) ⇔ index.js (нетипизированный, никаких тестов)

(ps. обратите внимание, что код React не является идиоматическим и может быть улучшен)

последнее замечание,

реальность такова, что JS и нетипизированный. Кто я такой, чтобы предлагать типизированный программирования к тебе?

смотрите, с JS мы находимся в другой области: освобожденные от типов, мы можем легко выражать вещи, которые трудно или невозможно дать правильный тип (что, безусловно, может быть преимуществом).

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

я рекомендую вам посмотреть на LISP (например ClojureScript) для вдохновения и инвестировать в тестировании кодов. Читайте путь substack чтобы получить представление.

Мирный.

Ну, вместо того, чтобы делать ручные настройки lint, мы можем включить все настройки lint в верхней части нашего JS-файла, например

объявите все глобальные var в этом файле, например:

/*global require,dojo,dojoConfig,alert */

объявите все настройки lint, такие как:

/*jslint browser:true,sloppy:true,nomen:true,unparam:true,plusplus:true,indent:4 */

надеюсь, что это поможет вам :)

есть и еще одна активно разрабатываемая альтернатива -JSCS-JavaScript code Style:

JSCS-это Линтер стиля кода для программного обеспечения вашего стиля руководство. Вы можете настроить JSCS для вашего проекта подробно с помощью over 150 правил проверки, включая пресеты из популярных руководств по стилю, таких как jQuery, Airbnb, Google и многое другое.

после шаблоны что вы можете выбрать от просто указав preset на .jscsrc файл конфигурации и настроить его - переопределить, включить или отключить какие-либо правила:

{
    "preset": "jquery",
    "requireCurlyBraces": null
}

есть также плагины и расширения, созданные для популярных редакторов.

Смотрите также: