JSHint ve jQuery: '$' tanımlı değil


215

Aşağıdaki JS:

(function() {
  "use strict";

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

}());

Verim:

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

JSHint 0.5.5 kullanılarak astarlandığında. Herhangi bir fikir?


jquery.jsSayfanıza eklediniz mi?
Rory McCrossan

4
Eğer tek başına sadece bu kodu yem buysa, $ bir tanımsız.
Sivri

Bu problem açısal olarak var. Sadece angular.element için $ değiştirmek ve uyarmak hiçbir jshint
Raphael Vitor

Yanıtlar:


381

JSHint'in nispeten yeni bir sürümünü kullanıyorsanız, genel olarak tercih edilen yaklaşım, projenizin kök dizininde bir .jshintrc dosyası oluşturmak ve bu yapılandırmayı içine yerleştirmektir:

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

Bu JSHint'e $ 'ın global bir değişken olduğunu bildirir ve false değeri geçersiz kılınmaması gerektiğini belirtir.

.Jshintrc dosyası JSHint'in gerçekten eski sürümlerinde desteklenmemiştir (2012'deki orijinal soru gibi v0.5.5 gibi). .Jshintrc dosyasını kullanamıyorsanız veya kullanmak istemiyorsanız, bunu komut dosyasının üstüne ekleyebilirsiniz:

/*globals $:false */

JSHint seçenekleri sayfasında görüldüğü gibi steno "jquery" jshint seçeneği de vardır .


47
Bu seçenek, jquery, iki salt okunur genel değişkeni tanımlar: $ ve jQuery. Daha kısa bir sürümüdür /*global $:false, jQuery:false */.
Anton Kovalyov

1
Visual Studio için JSHint ile seçeneğe "jQuery varsayalım" denir
Jowen

2
Seçenek bayrağı gitmenin yoludur.İlk zamanlayıcılar için: .jshintrc dosyanıza 'jquery: true' satırını ekleyin.
genkilabs

3
": False" nedeninin sebebi nedir ?, / * global $ * / 'i gayet iyi buldum. (Benim durumumda / * global jQuery * / gerçi idi)
Michiel

bunu tek tek yazmak yerine bir komut dosyasındaki tüm işlevler için genel olarak ayarlamanın bir yolu var /* global ... */mı? Ben tipik olarak tüm fonksiyonları ile bir script benim içine almak bu mainyüzden tek tek tanımlamak hantal ...
tsando

148

Ayrıca .jshintrc'nize iki satır ekleyebilirsiniz.

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

Bu, jshint'e iki global değişken olduğunu söyler.


3
kabul edilen cevap bu olmalıdır. sözdizimi denetleyicisi mutlu etmek için projenizde HERHANGİ TEK javascript DOSYASI çeşitli kod satırları ile kirletmek bir seçenek değildir. Teşekkürler wmil
Cosmin

51

Tek yapmanız gereken tek şey ayarlanır "jquery": trueGözlerinde farklı .jshintrc.

Başına JSHint seçenekleri referans :

jQuery

Bu seçenek, jQuery JavaScript kitaplığı tarafından maruz kalınan globalleri tanımlar.


6
Bu muhtemelen en iyi cevap olmalı ... utanç buraya gömüldü
Zach Lysobey

Sublime metin 3'te .jshintrc dosyası nerede bulunur? Bu seçeneği SublimeLinter.sublime-settings dosyasına (Tercihler-> Paket Ayarları-> SublimeLinter-> Ayarlar-Varsayılan) koymaya çalıştım ve ayrıca proje kök dizinime göre yeni .jshintrc dosyası (my.jshintrc) yapmaya çalıştım jshint.com/docs . Bunların hiçbiri bana yardımcı olmadı.
Milos

@Milos Sublimetext'te JSHint Gutter'ı kurun 3. Araçlar> JSHint> Linting Tercihlerini Ayarla'ya gidin, .jshintrc açılacaktır.
niren

1
Yine hiçbir şey, "$" işareti hala tanıyamaz. .Jshintrc dosyasını açtığımda şu yoldaydı: \ AppData \ Roaming \ Sublime Text 3 \ Packages \ JSHint Oluk, "jquery" koydum: true ve hiçbir şey olmuyor.
Milos

Globals bölümüne değişkenler eklemekten çok daha iyi bir cevap! Bu şekilde çözün!
Matthias Kleine

16

İşte .jshintrc koymak için mutlu küçük bir liste
zaman geçerken bu listeye ekleyeceğim.

{
  // 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
"Tarayıcı" ve "düğüm" seçeneklerini "doğru" olarak ayarlarsanız, bu listede gerekli olan tek öğe $, jquery ve açısal olur. Daha fazla bilgi için dokümanların Çevre bölümüne bakın: jshint.com/docs/options/#environments
user456584 27:14

Cevabınızı güncellemenizi içerecek şekilde düzenledim teşekkür ederim @ user456584
James Harrington

8

WebStorm, PyCharm, RubyMine veya IntelliJ IDEA gibi bir IntelliJ editörü kullanıyorsanız:

Dosya / Ayarlar / JavaScript / Kod Kalitesi Araçları / JSHint'in Ortamlar bölümünde jQuery onay kutusunu tıklayın.


1
Ayrıca, "config dosyasını kullan" seçeneğini işaretleyerek tüm iç yapılandırmaları geçersiz kılabileceğinize dikkat edin. Bu, WS'nin yapılandırma dosyası değişikliklerini görmesini sağlayacaktır. O olmadan sadece görmezden gelir.
neoswf

3

Her zamanki "JSHint globals kapat" tavsiye etmek yerine, bu sorunu gidermek için modül kalıbı kullanmanızı öneririz . Kodunuzu "içermekte" tutar ve performans artışı sağlar (Paul Irish'ın "Jquery hakkında öğrendiğim 10 şeye dayanarak " ).

Modül kalıplarımı şöyle yazıyorum:

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

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

Bu diğer performans avantajlarından yararlanabilirsiniz (daha fazla bilgi burada açıklanmaktadır ):

  • Kodu küçültürken, windownesne bildiriminde iletilen öğe de küçültülür. örneğin window.alert()olmak m.alert().
  • Kendi kendine çalışan anonim işlev içindeki kod, windownesnenin yalnızca 1 örneğini kullanır .
  • Bir windowözelliği veya yöntemi çağırırken kovalamacaya kestiğinizde , kapsam zincirinin pahalı bir şekilde geçmesini window.alert()( örneğin, daha hızlı) ve alert()(daha yavaş) performansı önlersiniz.
  • "Ad alanı" ve çevreleme yoluyla işlevlerin yerel kapsamı (globaller kötülüktür). Bu kodu ayrı komut dosyalarına bölmeniz gerekirse, bu komut dosyalarının her biri için bir alt modül oluşturabilir ve bunların bir ana modüle alınmasını sağlayabilirsiniz.

2
Bu da kullandığım bir model, ama benim için orijinal sorunu çözmüyor. JSHint hala bir değişkenin son satırda tanımlanmadığından şikayet ediyor ( "}(window))"sizin örneğinizde - jQuery ve Highcharts ile de sorun yaşadım). Dosya için global tanımlamak dışında onu kapatmanın bir yolunu bulamadım, ki bu daha sonra amacı yener.
myrosia

@ myrosia browser: trueJSHint'e bir tarayıcı ortamı beklediğinizi bildirir ( windowönceden tanımlanmış olan yerlerde ).
sam

Bu yaklaşımı seviyorum!
jethroo

2

IntelliJ editörü kullanıyorsanız, altında

  • Tercihler / Ayarlar
    • JavaScript
      • Kod Kalitesi Araçları
        • JSHint
          • Önceden tanımlanmış (altta), Ayarla'yı tıklayın

Örneğin console:false, herhangi bir şey yazabilirsiniz ve bunu listeye (.jshintrc) ekler - global olarak.


2

Çevrimiçi JSHint uygulamasını kullanırken bu hatayı gidermek için :

  • "YAPILANDIR" (sayfadaki orta sütunun üst kısmı) seçeneğini tıklayın
  • "JQuery" yi etkinleştirin (alttaki "ASSUME" bölümünün altında)

0

Muhtemelen aşağıdakileri yapmak istersiniz,

const $ = window.$

linting hatası atmasını önlemek için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.