Czy powinienem używać jslint lub jshint JavaScript validation?

Obecnie sprawdzam mój JavaScript przeciwko JSLint i robię postępy, to pomaga mi pisać lepiej JavaScript - w szczególności w pracy z biblioteką Jquery.

Natknąłem się teraz na JSHint , widelec JSLint.
Tak więc zastanawiam się nad aplikacjami webowymi, które są bardzo dużo JavaScript był napędzany, który jest lepszym lub Najbardziej odpowiednie narzędzie walidacji do pracy przeciwko:

  • JSLint czy JSHint?

Chcę zdecyduj teraz na mechanizm walidacji i posłuż się nim do walidacji po stronie klienta.

A różnica między jshint i jslint? Proszę wyjaśnić w jednym przykładzie javascript.

Linki:

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

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

Author: Vikrant, 2011-07-24

8 answers

[EDIT]
Ta odpowiedź została edytowana. Zostawiam oryginalną odpowiedź poniżej dla kontekstu (inaczej komentarze nie mają sensu).

Kiedy to pytanie zostało pierwotnie zadane, JSLint był głównym narzędziem lintingu dla JavaScript. JSHint był nowym widelcem Jslinta, ale nie odbiegał jeszcze zbytnio od oryginału.

Od tego czasu JSLint pozostaje dość statyczny, podczas gdy jshint znacznie się zmienił - wyrzucił wiele z bardziej antagonistycznych jslint Zasady, dodała cały ładunek nowych zasad i ogólnie stała się bardziej elastyczna. Dostępne jest również inne narzędzie ESLint, które jest jeszcze bardziej elastyczne i ma więcej opcji reguł.

W mojej pierwotnej odpowiedzi, powiedziałem, że nie powinieneś zmuszać się do trzymania się zasad JSLint; tak długo, jak rozumiesz, dlaczego to było rzucanie ostrzeżenia, możesz sam ocenić, czy zmienić kod, aby rozwiązać Ostrzeżenie, czy nie.

Z ultra-ścisłym zestawem reguł JSLint od 2011 roku była to rozsądna rada - widziałem bardzo mało zestawów kodów JavaScript, które mogłyby przejść test JSLint. Jednak z bardziej pragmatycznymi regułami dostępnymi w dzisiejszych narzędziach JSHint i ESLint, o wiele bardziej realistyczną propozycją jest próba przekazania kodu przez nie bez ostrzeżenia.

Nadal mogą występować przypadki, w których linter będzie narzekał na coś, co zrobiłeś celowo - na przykład wiesz, że zawsze powinieneś używać ===, ale tylko to raz masz dobry powód, aby użyć ==. Ale nawet wtedy, z ESLint masz możliwość określenia eslint-disable wokół danej linii, dzięki czemu nadal możesz przejść test lint z zerowymi ostrzeżeniami, a reszta kodu przestrzega reguły. (po prostu nie rób tego zbyt często!)


[ORYGINALNA ODPOWIEDŹ WYNIKA]

za wszelką cenę użyj JSLint. Ale nie daj się zawiesić na wyniki i na naprawianie wszystkiego, co ostrzega. To pomoże Ci poprawić Twój kod pomoże Ci znaleźć potencjalne błędy, ale nie wszystko, na co jslint narzeka, okazuje się prawdziwym problemem, więc nie czuj się, jakbyś musiał zakończyć proces z zerowymi ostrzeżeniami.

Prawie każdy kod Javascript o znacznej długości lub złożoności będzie generował ostrzeżenia W JSLint, bez względu na to, jak dobrze napisany. Jeśli mi Nie wierzysz, spróbuj uruchomić kilka popularnych bibliotek, takich jak JQuery.

Niektóre ostrzeżenia JSLint są bardziej wartościowe niż inni: dowiedz się, na które należy uważać, a które są mniej ważne. Każde Ostrzeżenie powinno być brane pod uwagę, ale nie czuj się zobowiązany do poprawiania kodu, aby usunąć każde ostrzeżenie; jest to całkowicie w porządku, aby spojrzeć na kod i zdecydować, że jesteś z niego zadowolony; są chwile, kiedy rzeczy, które JSlint nie lubi, są rzeczywiście słuszne.

 146
Author: Spudley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 18:18:50

tl; dr :

Jeśli szukasz bardzo wysokiego standardu dla siebie lub zespołu, JSLint. Ale niekoniecznie jest to standard, po prostu standard, z którego część przychodzi do nas dogmatycznie od Boga javascript o imieniu Doug Crockford. Jeśli chcesz być nieco bardziej elastyczny lub mieć w swoim zespole starych profesjonalistów, którzy nie interesują się opiniami Jslinta lub regularnie poruszają się między JS a innymi językami rodziny C, wypróbuj JSHint.

długie wersja :

Rozumowanie stojące za widelcem wyjaśnia całkiem dobrze, dlaczego JSHint istnieje:

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/

Więc myślę, że chodzi o to, że jest "napędzany społecznością", a nie Crockford. W praktyce JSHint jest na ogół nieco łagodniejszy (a przynajmniej konfigurowalny lub agnostyczny) na kilku stylistycznych i drobnych składniowe "opinie", na których JSLint jest stickler.

Jako przykład, jeśli uważasz, że zarówno A jak i b poniżej są w porządku, lub jeśli chcesz napisać kod z jednym lub więcej aspektami A, które nie są dostępne w B, JSHint jest dla Ciebie. Jeśli uważasz, że B jest jedyną poprawną opcją... JSLint. Jestem pewien, że są inne różnice, ale to podkreśla kilka.

A) przekazuje JSHint po wyjęciu z pudełka - zawodzi 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) przechodzi zarówno JSHint i 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);
    }
}());

Osobiście uważam, że kod JSLint jest bardzo miły do przyjrzenia się, a jedynymi jego twardymi cechami, z którymi się nie zgadzam, są nienawiść do więcej niż jednej deklaracji var w funkcji i deklaracji for-loop var i = 0 , oraz niektóre wymuszenia spacji dla deklaracji funkcji.

Kilka rzeczy, które wymuszają JSLint, uważam, że niekoniecznie są złe, ale nie są zsynchronizowane z dość standardowymi konwencjami dla innych języków w rodzinie (C, Java, Python itp...), które są często stosowane jako konwencje również w Javascript. Ponieważ piszę w różnych tych językach przez cały dzień i pracuję z członkami zespołu, którzy nie lubią kłaczków w naszym kodzie, uważam, że JSHint jest dobrą równowagą. Łapie rzeczy, które są uzasadnionym błędem lub naprawdę złą formą, ale nie szczeka na mnie jak JSLint (czasami, w sposób, którego nie mogę wyłączyć) za opinie stylistyczne lub składniowe nitpicks, które mnie nie obchodzą.

Wiele dobrych bibliotek nie jest Lint'able, co dla mnie pokazuje, że jest trochę prawdy w idei, że niektóre z JSLint polega po prostu na wypychaniu 1 wersji "dobrego kodu" (który jest rzeczywiście dobrym kodem). Ale z drugiej strony te same biblioteki (lub inne dobre) pewnie też nie są podpowiedziami, więc touché.

 368
Author: Ben Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:17

Istnieje inny dojrzały i aktywnie rozwijany "gracz" na froncie lintingu javascript - ESLint:

ESLint jest narzędziem do identyfikacji i raportowania wzorców występujących w Kod ECMAScript / JavaScript. Pod wieloma względami jest podobny do Jslinta i JSHint z kilkoma wyjątkami:

  • ESLint używa Esprima do parsowania JavaScript.
  • ESLint używa AST do oceny wzorców w kodzie.
  • ESLint jest całkowicie pluggable, każdy pojedyncza reguła jest wtyczką i możesz dodać więcej w czasie wykonywania.

Ważne jest to, że jest on rozszerzalny za pomocą niestandardowych wtyczek / reguł . Istnieje już wiele wtyczek napisanych do różnych celów. Wśród innych są:

I oczywiście możesz użyć wybranego narzędzia do budowania, aby uruchomić ESLint:

 54
Author: alecxe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 13:46:33

Kilka tygodni temu miałem to samo pytanie i oceniałem zarówno JSLint, jak i JSHint.

Wbrew odpowiedziom na to pytanie, mój wniosek nie był:

By all means use JSLint.

LUB:

Jeśli szukasz bardzo wysokiego standardu dla siebie lub zespołu, JSLint.

Jak można skonfigurować prawie te same zasady w JSHint jak w Jslincie. Więc argumentowałbym, że nie ma dużej różnicy w zasadach, które można / align = "left" /

Więc powody, aby wybrać jeden nad drugim są bardziej polityczne niż TECHNICZNE.

W końcu zdecydowaliśmy się na jshint z następujących powodów:

  • wydaje się być bardziej konfigurowalny niż JSLint.
  • wygląda zdecydowanie bardziej społecznościowo niż jednoosobowo (bez względu na to, jak fajny jest mężczyzna {16]}).
  • JSHint pasował do naszego stylu kodu OOTB lepiej niż JSLint.
 16
Author: lexicore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 14:45:16

Proponuję trzecią sugestię, kompilator zamknięcia Google (a także Linter zamknięcia ). Możesz go wypróbować online tutaj.

Kompilator Closure jest narzędziem umożliwiającym szybsze pobieranie i uruchamianie JavaScript. Jest to prawdziwy kompilator dla JavaScript. Zamiast kompilacji z języka źródłowego do kodu maszynowego, kompiluje z JavaScript do lepszego JavaScript. To parsuje JavaScript, analizuje go, usuwa martwy kod i przepisuje i minimalizuje to, co pozostało. Sprawdza również składnię, odwołania do zmiennych i typy oraz ostrzega o typowych pułapkach JavaScript.

 12
Author: Jeff Foster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-23 21:07:42

Przedmowa: cóż, to szybko się nasiliło. Ale postanowiłem to zrobić. Niech ta odpowiedź będzie pomocna dla Ciebie i innych czytelników.

Trochę mnie poniosło.

Kod Hinting

Podczas gdy JSLint i JSHint są dobrymi narzędziami w użyciu, przez lata doceniłem to, co mój przyjaciel @ugly_syntax nazywa:

Mniejsza przestrzeń projektowa .

Jest to ogólna zasada, podobnie jak" mnich zen", ograniczająca wybory, które trzeba podjąć, jeden może być bardziej produktywny i kreatywny.

Dlatego mój obecny ulubiony styl kodu JS zero-config:

StandardJS .

UPDATE :

Flow znacznie się poprawił. Z nim, ty można dodać typy do JS z pomoże Ci zapobiec wiele robaków. Ale może również nie wchodzić Ci w drogę, na przykład podczas łączenia nieopisanych JS. Spróbuj!

Quickstart / TL;DR

Dodaj standard jako zależność do ciebie projekt

npm install --save standard

Następnie w package.json Dodaj następujący skrypt testowy:

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

Dla snazziera podczas tworzenia, npm install --global snazzy i uruchom go zamiast npm test.

Uwaga: sprawdzanie typu A heurystyka

Mój przyjaciel, wspominając o przestrzeni projektowej, odniósł się do Elm i zachęcam do wypróbowania tego języka.

Dlaczego? JS jest w rzeczywistości inspirowany LISPEM, który jest specjalną klasą języków, która tak się składa, że jest untyped. Język taki jak Elm lub Purescriptwpisane funkcyjnych języków programowania.

Typ ogranicz swoją wolność, aby kompilator mógł cię sprawdzić i poprowadzić, gdy skończysz naruszać język lub reguły własnego programu; niezależnie od rozmiaru (LOC) Twojego programu.

[8]} niedawno jeden z młodszych kolegów zaimplementował interfejs reaktywny dwa razy: raz w Elm, raz w React; sprawdźcie, o czym mówię.

Porównaj Main.elm (typed) ⇔ index.js (untyped, no tests)

(ps. zauważ, że kod Reactowy nie jest idiomatyczny i może zostać ulepszony)

Ostatnia uwaga,

Rzeczywistość jest taka, że JS jest nietypowany. Kim jestem, żeby ci proponować programowanie na maszynie?

Widzisz, z JS jesteśmy w innej domenie: uwolnieni od typów, możemy łatwo wyrazić rzeczy, które są trudne lub niemożliwe do podania właściwego typu (co z pewnością może być przewaga).

Ale bez typów nie ma zbyt wiele, aby utrzymać nasze programy w ryzach, więc jesteśmy zmuszeni wprowadzić testy i (w mniejszym stopniu) style kodu.

Polecam spojrzeć na LISP (np. ClojureScript ) dla inspiracji i zainwestować w testowanie swoich kodów. Przeczytaj sposób podstacji , aby uzyskać pomysł.

Pokój.
 11
Author: wires,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 18:48:30

Cóż, zamiast ręcznych ustawień lint możemy umieścić wszystkie ustawienia lint na górze naszego pliku JS, np.

Zadeklaruj wszystkie globalne var w tym Pliku jak:

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

Zadeklaruj wszystkie ustawienia lint jak:

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

Mam nadzieję, że to ci pomoże:)

 8
Author: Vikash Pandey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 13:02:12

Istnieje również inna aktywnie rozwijana alternatywa - Jscs-styl kodu JavaScript :

JSCS jest linterem stylu kodu do programowego wymuszania Twojego stylu przewodnik. Możesz skonfigurować JSCS dla swojego projektu w szczegółach za pomocą ponad 150 zasad walidacji, w tym presety z popularnych przewodników po stylach, takich jak jQuery, Airbnb, Google i wiele innych.

Jest wyposażony w wiele presetów, które można wybrać, po prostu podając preset w .jscsrc Plik konfiguracyjny i dostosuj go - nadpisuj, Włącz lub wyłącz dowolne reguły:

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

Istnieją również wtyczki i rozszerzenia zbudowane dla popularnych edytorów.

Zobacz też:

 1
Author: alecxe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 15:58:33