JSHintおよびjQuery: '$'が定義されていません


215

次のJS:

(function() {
  "use strict";

  $("#target").click(function(){
    console.log("clicked");
  });

}());

収量:

test.js: line 5, col 3, '$' is not defined.

JSHint 0.5.5を使用してリンクした場合。何か案は?


jquery.jsページに追加しましたか?
Rory McCrossan 2012年

4
まあ、それだけでコードをフィードする場合$ は、未定義です。
先のとがった

私は角度でこの問題を抱えています。$をangular.elementに変更し、jshint no warn
Raphael Vitor

回答:


381

JSHintの比較的新しいバージョンを使用している場合、一般的に推奨されるアプローチは、プロジェクトのルートに.jshintrcファイルを作成し、この構成をその中に配置することです。

{
    "globals": {
        "$": false
    }
}

これは$がグローバル変数であることをJSHintに宣言し、falseはオーバーライドされないことを示します。

.jshintrcファイルは、JSHintの本当に古いバージョン(2012年の元の質問のようなv0.5.5など)ではサポートされていませんでした。.jshintrcファイルを使用できない、または使用したくない場合は、これをスクリプトファイルの先頭に追加できます。

/*globals $:false */

JSHintのオプションページにあるように、省略形の「jquery」jshintオプションもあります


47
このオプションjqueryは、2つの読み取り専用グローバル変数$とjQueryを定義するだけです。の短縮版です/*global $:false, jQuery:false */
アントンコヴァリョフ2012年

1
Visual Studio用の私のJSHintでは、オプションは「jQueryのを想定して」と呼ばれている
Jowen

2
オプションフラグを使用します。最初のタイマーの場合:.jshintrcファイルに「jquery:true」という行を追加します。
genkilabs 2014

3
":false"の理由は何ですか?、/ * global $ * /が問題なく動作することがわかりました。(私の場合は/ * global jQuery * /ですが)
Michiel

これを1つずつ入力するのではなく、スクリプト内のすべての関数に一般的に設定する方法はあり/* global ... */ますか?私は通常、すべての関数を含むスクリプトを自分にインポートするmainため、1つずつ定義するのは面倒です...
tsando

148

.jshintrcに2行追加することもできます

  "globals": {
    "$": false,
    "jQuery": false
  }

これは、2つのグローバル変数があることをjshintに伝えます。


3
これは受け入れられる答えになるはずです。構文チェッカーを満足させるために、プロジェクト内のすべてのJavaScriptファイルをさまざまなコード行で汚染することはできません。ありがとうwmil
Cosmin、

51

あなたがする必要があるすべてはあなたので設定さ"jquery": trueれています.jshintrc

パーJSHintオプション参照

jquery

このオプションは、jQuery JavaScriptライブラリによって公開されるグローバルを定義します。


6
これがおそらく一番の答えになるはずです...残念ながらここに埋もれています
Zach Lysobey

Sublime text 3の.jshintrcファイルはどこにありますか?このオプションをSublimeLinter.sublime-settingsファイル(設定->パッケージ設定-> SublimeLinter->設定-デフォルト)に入れようとし、プロジェクトルートディレクトリに新しい.jshintrcファイル(my.jshintrc)を作成しようとしました。jshint.com/docs。これのどれも私を助けませんでした。
ミロス2015

@Milos JSHint Gutterをsublimetextでインストールします。3. [ツール]> [JSHint]> [Linting設定の設定]に移動します。.jshintrcが開きます。
niren 2015

1
再び何もない、それでもまだ「$」記号を認識できない。.jshintrcを開くと、次のパスにあります:\ AppData \ Roaming \ Sublime Text 3 \ Packages \ JSHint Gutter、「jquery」:trueを指定しても何も起こりません。
Milos

グローバルセクションに変数を追加するよりもはるかに良い答えです!このように解決してください!
Matthias Kleine 2016

16

これは、.jshintrc
に追加する幸せな小さなリストです。時間が経過したらこのリストに追加します。

{
  // other settings...
  // ENVIRONMENTS
  // "browser": true, // Is in most configs by default
  "node": true,
  // others (e.g. yui, mootools, rhino, worker, etc.)
  "globals": {
    "$":false,
    "jquery":false,
    "angular":false
    // other explicit global names to exclude
  },
}

1
「browser」および「node」オプションを「true」に設定した場合、このリストで必要な残りの項目は、$、jquery、angularのみです。詳細については、ドキュメントの「環境」セクションを参照してください。jshint.com

回答を編集して、更新ありがとうございました@ user456584
James Harrington

8

WebStorm、PyCharm、RubyMine、IntelliJ IDEAなどのIntelliJエディターを使用している場合:

File / Settings / JavaScript / Code Quality Tools / JSHintのEnvironmentsセクションで、jQueryチェックボックスをクリックします。


1
「構成ファイルを使用」をチェックすることで、すべての内部構成を上書きできることにも注意してください。これにより、構成ファイルの変更がWSに表示されます。それがなければ、彼は単にそれを無視します。
neoswf

3

通常の「JSHintグローバルをオフにする」ことを推奨する代わりに、モジュールパターンを使用してこの問題を修正することをお勧めします。コードを「保持」し、パフォーマンスを向上させます(Paul Irishの「Jqueryについて学んだ10のこと」に基づく))。

私は次のようなモジュールパターンを書く傾向があります。

(function (window) {
    // Handle dependencies
    var angular = window.angular,
        $ = window.$,
        document = window.document;

    // Your application's code
}(window))

これらの他のパフォーマンス上の利点を得ることができます(ここで詳しく説明します):

  • コードwindowを縮小すると、渡されたオブジェクト宣言も縮小されます。例えばにwindow.alert()なるm.alert()
  • 自己実行型無名関数内のコードは、windowオブジェクトの1つのインスタンスのみを使用します。
  • windowプロパティまたはメソッドを呼び出すときに、追跡を避け、スコープチェーンの高コストなトラバースwindow.alert()(たとえば、(より速い)とalert()(より遅い)のパフォーマンス)を回避します。
  • 「名前空間」と封じ込めによる機能のローカルスコープ(グローバルは悪です)。このコードを個別のスクリプトに分割する必要がある場合は、それらのスクリプトごとにサブモジュールを作成し、それらを1つのメインモジュールにインポートすることができます。

2
これは私が使用するパターンでもありますが、元の問題を解決するものではありません。JSHintは、変数が最後の行で定義されていないとまだ文句を言い"}(window))ます(あなたの例では "-jQueryとHighchartsでも問題がありました。)ファイルのグローバルを定義する以外に、変数をオフにする方法が見つかりませんでした。これはその後、目的に反し。
myrosia

@myrosia browser: trueはJSHintに、ブラウザー環境(windowは既に定義されている)が必要であることを伝えます。
サム

私はこのアプローチが好きです!
jethroo

2

IntelliJエディターを使用している場合は、

  • 設定/設定
    • Javascript
      • コード品質ツール
        • JSHint
          • 定義済み(下部)、[ 設定 ]をクリックします

たとえばconsole:false、何でも入力でき、リスト(.jshintrc)にもグローバルとして追加されます。



0

あなたはおそらく次のことをしたいでしょう、

const $ = window.$

lintingエラーをスローしないようにするためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.