JSLint または JSHint JavaScript 検証を使用する必要がありますか?[閉まっている]
-
25-10-2019 - |
質問
私は現在、JSLint に対して JavaScript を検証しており、特に Jquery ライブラリの操作において、より良い JavaScript を書くのに役立っています。
今出会ってしまった JSHint, 、フォーク JSLint.
そこで私は、JavaScript が主に使用されている Web アプリケーションについて疑問に思っています。どの検証ツールがより優れているか、最も適切な検証ツールなのかを考えています。
- JSLint それとも JSHint?
ここで検証メカニズムを決定し、今後はこれをクライアント側の検証に使用したいと考えています。
jshintとjslintの違いは何ですか?単一のJavaScriptの例で説明してください。
リンク:
jslint- http://jslint.com/
解決
編集
この答えは編集されています。以下にコンテキストのために元の答えを残します(そうでなければ、コメントは意味がありません)。
この質問が元々尋ねられたとき、JSlintはJavaScriptの主要な糸くずツールでした。 JshintはJSlintの新しいフォークでしたが、まだオリジナルからあまり分岐していませんでした。
それ以来、JSLINTはかなり静的なままであり、Jshintは大幅に変更されました - JSLINTのより敵対的なルールの多くを捨て、新しいルール全体を追加し、一般的に柔軟になりました。また、もう1つのツールESLINTが利用可能になりました。これはさらに柔軟性があり、より多くのルールオプションがあります。
私の元の答えで、私はあなたがJSLINTのルールに固執するように強制するべきではないと言った。なぜ警告を発しているのかを理解している限り、警告を解決するためにコードを変更するかどうかを自分で判断することができます。
2011年のJSLINTの超強調ルールセットでは、これは合理的なアドバイスでした。JSLINTテストに合格できるJavaScriptコードセットはほとんどありませんでした。ただし、今日のJshintおよびEslintツールで利用できるより実用的なルールがあるため、警告をゼロでコードを通過させることは、はるかに現実的な提案です。
リンターが意図的に行ったことについてリナーが不平を言う場合がある場合もあります。たとえば、常に使用する必要があることを知っています。 ===
しかし、ちょうどこれはあなたが使用する正当な理由があります ==
. 。しかし、それでも、eslintを使用すると、指定するオプションがあります eslint-disable
問題のラインの周りで、ゼロ警告を備えた合格リントテストを受けることができ、残りのコードがルールに従っています。 (あまり頻繁にそのようなことをしないでください!)
元の答えが続く
ぜひjslintを使用してください。しかし、結果に夢中になり、警告するすべてを修正しないでください。それはあなたがあなたのコードを改善するのに役立ち、それはあなたが潜在的なバグを見つけるのに役立ちますが、JSLINTが実際の問題であることが判明したすべてのものはすべてであることが判明したので、あなたはあなたがゼロ警告でプロセスを完了する必要があるとは思わないでください。
どれだけよく書かれていても、かなりの長さまたは複雑さを備えたJavaScriptコードは、JSLINTで警告を生成します。あなたが私を信じていないなら、JQueryのような人気のあるライブラリをそれを通して実行してみてください。
一部のjslint警告は、他のJSLINT警告よりも価値があります。どちらに注意すべきか、どのjsがそれほど重要ではないかを学びます。すべての警告を考慮する必要がありますが、特定の警告をクリアするためにコードを修正する義務を感じないでください。コードを見て、あなたがそれに満足していると判断しても大丈夫です。 JSLINTが気に入らないことは、実際には正しいことであることがあります。
他のヒント
持ち帰り:
自分自身またはチームにとって非常に高い基準を探している場合は、JSLint をお勧めします。しかし、それは必ずしも標準であるわけではなく、単なる標準であり、その一部は Doug Crockford という名前の JavaScript の神様から独断的に私たちに与えられています。もう少し柔軟性が必要な場合、またはチームに JSLint の意見を受け入れない古い専門家がいる場合、または JS と他の C ファミリ言語の間を定期的に行ったり来たりしている場合は、JSHint を試してください。
ロングバージョン:
フォークの背後にある理由は、JSHint が存在する理由をよく説明しています。
http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovallyov.net/2011/02/20/why-i-forked-jslint-to-jshint/
したがって、クロックフォード主導ではなく「コミュニティ主導」という考えだと思います。実際には、JSHint は一般に、JSLint がこだわるいくつかの文体的およびマイナーな構文上の「意見」に対して、もう少し寛容です (または、少なくとも構成可能または不可知論的です)。
たとえば、以下の A と B の両方が問題ないと思われる場合、または A の B では利用できない 1 つ以上の側面を使用してコードを作成したい場合は、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 ループを嫌う var i = 0
宣言, 、および関数宣言の空白文字の強制の一部。
JSLint が強制する空白のいくつかは、必ずしも悪いわけではありませんが、同族の他の言語 (C、Java、Python など) のかなり標準的な空白規則と同期していません。 JavaScript の規約としても同様です。私は一日中これらのさまざまな言語で書いており、コード内の Lint スタイルの空白を好まないチーム メンバーと作業しているため、JSHint がバランスが取れていると感じています。これは正当なバグや非常に悪い形式のものを捕捉しますが、JSLint のように、私が気にしない文体上の意見や構文上の細かい点について (時には無効にできない方法で) 怒鳴りつけることはありません。
多くの優れたライブラリは Lint 対応ではありません。これは、JSLint の一部が単に「優れたコード」(実際、優れたコード) の 1 つのバージョンをプッシュするだけであるという考えにある程度の真実があることを示しています。しかし、繰り返しになりますが、同じライブラリ (または他の優れたライブラリ) もおそらく Hint'able ではありません。
別のものがあります 成熟して積極的に開発されました JavaScriptの糸くずの前線での「プレーヤー」 - ESLint
:
ESLINTは、ECMAScript/JavaScriptコードに見られるパターンを特定して報告するためのツールです。多くの点で、それはいくつかの例外を除いて、JSlintとJshintに似ています:
- Eslintは、JavaScriptの解析にEsprimaを使用します。
- EslintはASTを使用してコードのパターンを評価します。
- ESLINTは完全にプラグ可能であり、すべてのルールはプラグインであり、実行時にさらに追加できます。
ここで本当に重要なのは、それがそうだということです カスタムプラグイン/ルールを介して拡張可能. 。さまざまな目的のために書かれた複数のプラグインがすでにあります。の中 その他, 、 がある:
- Eslint-Plugin-Angular (からのいくつかのガイドラインを実施します ジョンパパの角度スタイルガイド)
- Eslint-Plugin-Jasmine
- Eslint-Plugin-Backbone
そして、もちろん、選択したビルドツールを使用して実行することができます ESLint
:
数週間前に同じ質問があり、JSlintとJshintの両方を評価していました。
この質問の答えに反して、私の結論は次のとおりでした。
ぜひjslintを使用してください。
または:
あなた自身やチームの非常に高い基準を探しているなら、JSlint。
構成できるように ほとんど jslintと同じルール。JSlintと同じルール。ですから、私はあなたが達成できるルールに大きな違いはないと主張します。
したがって、互いに選択する理由は、技術的なものよりも政治的です。
次の理由により、ついにJshintを使用することにしました。
- JSLINTよりも設定可能なようです。
- ワンマンショーではなく、間違いなくコミュニティ主導のように見えます(どんなにクールであっても その男 は)。
- Jshintは、JSLINTのコードスタイルOOTBをよりよくマッチしました。
私は3番目の提案をします、 Googleクロージャーコンパイラ (そしてまた クロージャーリナー)。オンラインで試してみることができます ここ.
閉鎖コンパイラは、JavaScriptのダウンロードをより速く実行するためのツールです。 JavaScriptの真のコンパイラです。ソース言語からマシンコードにコンパイルする代わりに、JavaScriptからより良いJavaScriptにコンパイルします。 JavaScriptを解析し、分析し、死んだコードを削除し、書き直して残っているものを最小限に抑えます。また、構文、可変参照、およびタイプをチェックし、一般的なJavaScriptの落とし穴について警告します。
序文:まあ、それはすぐにエスカレートしました。しかし、それを引き抜くことにしました。この答えがあなたや他の読者に役立つように。
コードヒント
JSLINTとJSHINTは使用するのに適したツールですが、長年にわたって私の友人が何を感謝するようになりましたか @ugly_syntax 電話:
より小さな設計スペース.
これは一般的な原則であり、「禅の僧k」のようなものであり、自分が行わなければならない選択を制限し、より生産的で創造的にすることができます。
したがって、私の現在のお気に入りの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に触発されています。 型めかけ. 。エルムなどの言語 purescript それは タイプしました 機能的なプログラミング言語。
コンパイラが言語またはあなた自身のプログラムのルールに違反したときにあなたをチェックしてガイドできるようにするために、あなたの自由を制限します。プログラムのサイズ(loc)に関係なく。
私たちは最近、ジュニアの同僚にリアクティブインターフェイスを2回実装させました。私が話していることについていくつかのアイデアを得るために見てください。
(PS。反応コードは慣用的ではなく、改善される可能性があることに注意してください)
最後の発言、
現実は、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は、スタイルガイドをプログラム的に実施するためのコードスタイルのリナーです。 JQuery、Airbnb、Googleなどの人気のあるスタイルガイドのプリセットを含む150を超える検証ルールを使用して、プロジェクトのJSCを詳細に構成できます。
複数が付属しています プリセット 単に指定するだけで選択できること preset
の中に .jscsrc
構成ファイルとカスタマイズ - ルールをオーバーライド、有効化、または無効にします。
{
"preset": "jquery",
"requireCurlyBraces": null
}
人気のある編集者向けに構築されたプラグインと拡張機能もあります。
参照してください: