JSHint और jQuery: '$' परिभाषित नहीं है


215

निम्नलिखित जेएस:

(function() {
  "use strict";

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

}());

पैदावार:

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

जब JSHint 0.5.5 का उपयोग करते हुए लिंट किया गया। कोई विचार?


क्या आपने jquery.jsअपने पृष्ठ में जोड़ा है?
बजे रोरी मैकक्रॉन

4
खैर, अगर आप इसे अपने आप में सिर्फ इतना है कि कोड को खिलाने, $ है अपरिभाषित।
नुकीले

मुझे कोणीय में यह समस्या है। बस $ $ कोणीय में बदल दें। जिशंट नो वार्न
राफेल विटोर

जवाबों:


381

यदि आप JSHint के अपेक्षाकृत हाल के संस्करण का उपयोग कर रहे हैं, तो आम तौर पर पसंदीदा दृष्टिकोण आपकी परियोजना की जड़ में एक .jshintrc फ़ाइल बनाना है, और इस कॉन्फ़िगरेशन को इसमें डालें:

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

यह JSHint को यह घोषणा करता है कि $ एक वैश्विक परिवर्तनशील है, और असत्य इंगित करता है कि इसे ओवरराइड नहीं किया जाना चाहिए।

JSHint के पुराने संस्करणों में .jshintrc फ़ाइल का समर्थन नहीं किया गया था (जैसे 2012 में मूल प्रश्न की तरह v0.5.5)। यदि आप .jshintrc फ़ाइल का उपयोग नहीं करना चाहते हैं या नहीं कर सकते हैं, तो आप इसे स्क्रिप्ट फ़ाइल के शीर्ष पर जोड़ सकते हैं:

/*globals $:false */

वहाँ भी एक आशुलिपि "jquery" jshint विकल्प है जैसा कि JSHint विकल्प पृष्ठ पर देखा गया है ।


47
यह विकल्प, jquery, केवल दो रीड-ओनली वैश्विक चर को परिभाषित करता है: $ और jQuery। यह एक छोटा संस्करण है /*global $:false, jQuery:false */
एंटोन कोवलियाव

1
विजुअल स्टूडियो के लिए मेरे JSHint के साथ, विकल्प को "मान लीजिए jQuery" कहा जाता है
Jowen

2
विकल्प ध्वज जाने का तरीका है। पहली टाइमर्स के लिए: अपनी .jshintrc फ़ाइल में 'jquery: true' लाइन जोड़ें।
genkilabs

3
": असत्य" का क्या कारण है ?, मैंने पाया / * वैश्विक $ * / कार्य ठीक है। (था / * वैश्विक jQuery * / हालांकि मेरे मामले में)
Michiel

क्या स्क्रिप्ट के भीतर सभी कार्यों के लिए यह उदारतापूर्वक सेट करने का एक तरीका है, बजाय एक-एक करके टाइप करने के लिए /* global ... */? मैं आम तौर पर अपने सभी कार्यों के साथ एक स्क्रिप्ट को अपने में आयात करता हूं mainताकि एक-एक करके परिभाषित करना बोझिल हो ...
tsando

148

आप अपने .jshintrc में दो लाइनें भी जोड़ सकते हैं

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

यह jshint को बताता है कि दो वैश्विक चर हैं।


3
यह स्वीकृत उत्तर होना चाहिए। सिंटैक्स चेकर को खुश करने के लिए कोड की विभिन्न लाइनों के साथ अपनी परियोजना में हर जगह प्रदूषण जावास्क्रिप्ट को भरना एक विकल्प नहीं है। धन्यवाद wmil
कॉस्मिन

51

आपको केवल "jquery": trueअपने में सेट करना है .jshintrc

प्रति JSHint विकल्पों संदर्भ :

jQuery

यह विकल्प jQuery जावास्क्रिप्ट पुस्तकालय द्वारा उजागर ग्लोबल्स को परिभाषित करता है।


6
यह शायद शीर्ष उत्तर होना चाहिए ... शर्म की बात है यहाँ नीचे दफन है
Zach Lysobey

Sublime पाठ 3 में .jshintrc फ़ाइल कहाँ खोजें? मैंने इस विकल्प को SublimeLinter.sublime-settings फ़ाइल (प्राथमिकताएँ-> पैकेज सेटिंग्स-> SublimeLinter-> Settings-Default) में डालने का प्रयास किया और अपनी परियोजना रूट निर्देशिका में नई .jshintrc फ़ाइल (my.jintintrc) बनाने की भी कोशिश की। jshint.com/docs । इसमें से गैर ने मेरी मदद की।
मिलोस

@Milos Sublimetext 3 में JSHint गटर स्थापित करें। टूल> JSHint> पर जाएं लाइनिंग प्राथमिकताएं सेट करें, यह खुलेगा। jshintrc।
निरेन

1
फिर से कुछ नहीं, यह अभी भी "$" चिन्ह को नहीं पहचान सकता है। जब मैं खोलता हूँ .jshintrc यह पथ पर है: \ AppData \ Roaming \ Sublime पाठ 3 \ पैकेज \ JSHint गटर, मैं "jquery" डालता हूं: यह सच है और कुछ भी नहीं होता है।
मिलोस

ग्लोबल्स अनुभाग में चर जोड़ने की तुलना में बहुत बेहतर उत्तर! इसे इस तरह से हल करें!
मथायस क्लेइन

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
यदि आप "ब्राउज़र" और "नोड" विकल्पों को "सही" पर सेट करते हैं, तो इस सूची में केवल शेष आइटम जो आवश्यक हैं $, jquery, और कोणीय हैं। अधिक जानकारी के लिए, डॉक्स का पर्यावरण अनुभाग देखें: jshint.com/docs/options/#en परिवेश
user456584

मैंने आपका अपडेट शामिल करने के लिए उत्तर का संपादन किया है धन्यवाद @ user456584
जेम्स हैरिंगटन

8

यदि आप एक IntelliJ संपादक का उपयोग कर रहे हैं जैसे WebStorm, PyCharm, RubyMine, या IntelliJ IDEA:

फ़ाइल / सेटिंग्स / जावास्क्रिप्ट / कोड गुणवत्ता उपकरण / JSHint के वातावरण अनुभाग में, jQuery के चेकबॉक्स पर क्लिक करें।


1
इस बात पर भी ध्यान दें कि आप "इनफिगर फाइल का उपयोग" करके सभी आंतरिक कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं। यह WS को कॉन्फ़िग फ़ाइल संशोधनों को देखेगा। इसके बिना वह सिर्फ इसे अनदेखा करता है।
neoswf

3

सामान्य "जेएसहिंट ग्लोबल्स को बंद करने" की सिफारिश करने के बजाय, मैं इस समस्या को ठीक करने के लिए मॉड्यूल पैटर्न का उपयोग करने की सलाह देता हूं । यह आपके कोड को "समाहित" रखता है और एक प्रदर्शन को बढ़ावा देता है (पॉल आयरिश की "10 चीजें जो मैंने Jquery के बारे में सीखा है" के आधार पर )।

मैं अपने मॉड्यूल पैटर्न इस तरह लिखना चाहता हूं:

(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()(धीमा) प्रदर्शन।
  • "नेमस्पेसिंग" और समागम (ग्लोबल्स बुराई हैं) के माध्यम से कार्यों का स्थानीय क्षेत्र। यदि आपको इस कोड को अलग-अलग स्क्रिप्ट में तोड़ने की आवश्यकता है, तो आप उन प्रत्येक स्क्रिप्ट के लिए एक सबमॉड्यूल बना सकते हैं, और उन्हें एक मुख्य मॉड्यूल में आयात कर सकते हैं।

2
यह एक पैटर्न है जिसे मैं भी उपयोग करता हूं, लेकिन यह मेरे लिए मूल समस्या का समाधान नहीं करता है। JSHint अभी भी शिकायत करता है कि एक चर को अंतिम पंक्ति में परिभाषित नहीं किया गया है ( "}(window))"आपके उदाहरण में - मेरे पास jQuery और Highcharts के साथ भी समस्या थी)। मुझे फ़ाइल के लिए वैश्विक परिभाषित करने के अलावा इसे बंद करने का कोई तरीका नहीं मिला है," जो तब उद्देश्य को पराजित करता है।
myrosia

@myrosia browser: trueJSHint से कहता है कि आप एक ब्राउज़र वातावरण (जहां windowपहले से परिभाषित है) की अपेक्षा करते हैं ।
सैम

मुझे यह तरीका पसंद है!
जेथ्रो

2

यदि आप एक IntelliJ संपादक का उपयोग कर रहे हैं, के तहत

  • पसंद / सेटिंग
    • जावास्क्रिप्ट
      • कोड गुणवत्ता उपकरण
        • JSHint
          • पूर्वनिर्धारित (सबसे नीचे), सेट पर क्लिक करें

आप उदाहरण के लिए console:false, कुछ भी लिख सकते हैं , और यह सूची (.jshintrc) के साथ-साथ एक वैश्विक के रूप में भी जोड़ देगा।



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.