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

StackOverflow https://stackoverflow.com/questions/6803305

  •  25-10-2019
  •  | 
  •  

Вопрос

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

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

  • JSLint или JSHint?

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

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

Ссылки:

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

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

Это было полезно?

Решение

[РЕДАКТИРОВАТЬ]
Этот ответ был отредактирован.Я оставляю исходный ответ ниже для контекста (иначе комментарии не имели бы смысла).

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

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

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

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

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


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

Обязательно используйте 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-diven-fork-fjslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/

Поэтому я думаю, что идея заключается в том, что это «управляемое сообществом», а не Крокфорд. На практитности JSHINT, как правило, немного более снисходительна (или, по крайней мере, настраиваемой или агностик) на нескольких стилистических и незначительных синтаксических «мнениях», на которых JSLINT является стипендиатом.

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

А) проходит 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);
  }
})();

Б) проходит как 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 в функции и для петли var i = 0 декларации, и некоторые из пробелов для пробелов для объявлений функций.

Несколько пробелов, которые обеспечивает соблюдение JSLINT, я считаю, что не обязательно плохие, но не синхронизированы с некоторыми довольно стандартными пробелами для других языков в семье (C, Java, Python и т. Д.), Которые часто бывают следовали как конвенции в JavaScript. Поскольку я пишу на разных языках в течение дня и работаю с членами команды, которые не любят пробел в стиле Lint в нашем коде, я считаю, что JShint является хорошим балансом. Он ловит вещи, которые являются законной ошибкой или действительно плохой формой, но не лает на меня, как это делает JSLINT (иногда, как я не могу отключить) для стилистических мнений или синтаксических придирков, о которых я не забочусь.

Многие хорошие библиотеки не могут быть невозможно, что для меня демонстрирует, что есть некоторая правда в идее, что некоторые из JSLINT - это просто выдвижение 1 версии «хорошего кода» (что, действительно, хороший код). Но опять же, те же библиотеки (или другие хорошие), вероятно, также не намекают, так что, Touché.

Есть еще один зрелый и активно развивается «Игрок» на фронте Linting JavaScript - ESLint:

Eslint - это инструмент для выявления и отчетности по шаблонам, найденным в коде Ecmascript/JavaScript. Во многих отношениях это похоже на JSLINT и JSHINT, за несколько исключений:

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

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

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

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

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

Во что бы то ни стало использовать jslint.

Или же:

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

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

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

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

  • Кажется более настраиваемым, что JSlint.
  • Выглядит определенно более ориентированным на сообщество, а не на одном человеке (как бы круто Тот человек является).
  • Jshint соответствовал нашему кодовому стилю OOTB лучше, что JSLINT.

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

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

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

I got a bit carried away here

Код намек

В то время как JSLINT и JSHINT - хорошие инструменты для использования, за эти годы я стал оценить то, что мой друг @ugly_syntax Звонки:

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

Это общий принцип, очень похожий на «монах -дзен», ограничивающий выбор, который нужно сделать, можно быть более продуктивным и креативным.

Поэтому мой нынешний любимый стиль кода Zero-Config JS:

Стандарт.

ОБНОВИТЬ:

Поток значительно улучшился. С помощью этого вы можете добавить типы в 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, который является специальным классом языков, который оказывается беспрепятственный. Анкет Язык, такой как ELM или Purescript находятся напечатано Функциональные языки программирования.

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

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

Сравнивать Main.elm (напечатано) ⇔ index.js (Безтипные, без тестов)

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

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

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

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

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

Я рекомендую вам посмотреть на LISP (например, Clojurescript) для вдохновения и инвестиции в тестирование ваших кодов. Читать Путь подмака Чтобы получить идею.

Мир.

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

Объявить все глобальные VAR в этом файле как:

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

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

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

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

Есть также еще одна активно разработанная альтернатива - JSCS - стиль кода JavaScript:

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

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

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

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

Также см:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top