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

4
당신은 그 자체로 그냥 코드를 공급 음, 만약 $ 됩니다 정의되지 않은.
Pointy

각도 에이 문제가 있습니다. 그냥 angular.element에 $를 변경하지 않고 경고를 더 jshint
라파엘 비터

답변:


381

비교적 최신 버전의 JSHint를 사용하는 경우 일반적으로 선호되는 접근 방식은 프로젝트 루트에 .jshintrc 파일을 작성하고이 구성을 파일에 저장하는 것입니다.

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

이는 $가 전역 변수임을 JSHint에 선언하고 false는 대체하지 않아야 함을 나타냅니다.

.jshintrc 파일은 실제 JSHint 이전 버전 (예 : 2012 년의 원래 질문과 같은 v0.5.5)에서는 지원되지 않았습니다. .jshintrc 파일을 사용할 수 없거나 사용하지 않으려면 스크립트 파일 맨 위에이를 추가 할 수 있습니다.

/*globals $:false */

JSHint 옵션 페이지 에서 볼 수 있듯이 속기 "jquery"jshint 옵션도 있습니다 .


47
이 jquery 옵션은 단순히 $와 jQuery라는 두 가지 읽기 전용 전역 변수를 정의합니다. 의 짧은 버전입니다 /*global $:false, jQuery:false */.
Anton Kovalyov 2018 년

1
Visual Studio 용 JSHint를 사용하면이 옵션의 이름을 "jQuery 가정"
Jowen

2
옵션 플래그는가는 길입니다. 첫 번째 타이머의 경우 : .jshintrc 파일에 'jquery : true'줄을 추가하십시오.
genkilabs

3
": false"의 이유는 무엇입니까? / * global $ * /가 제대로 작동한다는 것을 알았습니다. (내 경우에는 / * global jQuery * /이지만)
Michiel

에 하나씩 입력하는 대신 스크립트 내의 모든 함수에 대해 일반적으로 이것을 설정하는 방법이 /* global ... */있습니까? 나는 일반적으로 모든 기능을 가진 스크립트를 내로 가져 오기 main때문에 하나씩 정의하는 것이 번거 롭다.
tsando

148

.jshintrc에 두 줄을 추가 할 수도 있습니다

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

이것은 jshint에게 두 개의 전역 변수가 있음을 알려줍니다.


3
이것이 정답이어야합니다. 구문 검사기를 만족시키기 위해 다양한 코드 줄로 프로젝트의 모든 단일 자바 스크립트 파일을 오염시키는 것은 옵션이 아닙니다. 감사 wmil
코스 민

51

할 일은에 설정 "jquery": true되어 있습니다 .jshintrc.

JSHint 옵션 참조 :

jquery

이 옵션은 jQuery JavaScript 라이브러리에 의해 노출되는 글로벌을 정의합니다.


6
이것은 아마도 최고의 대답이 될 것입니다 ... 부끄러워 여기
부인

Sublime text 3에서 .jshintrc 파일을 어디에서 찾을 수 있습니까? 이 옵션을 SublimeLinter.sublime-settings 파일 (Preferences-> Package Settings-> SublimeLinter-> Settings-Default)에 넣고 프로젝트 루트 디렉토리에 새로운 .jshintrc 파일 (my.jshintrc)을 만들려고했습니다. jshint.com/docs . 이것 중 어느 것도 나를 도우 지 못했습니다.
Milos

@Milos sublimetext에 JSHint Gutter 설치 3. 도구> JSHint> Linting 환경 설정으로 이동하면 .jshintrc가 열립니다.
niren December

1
다시는 아무것도 "$"기호를 인식 할 수 없습니다. .jshintrc를 열면 \ AppData \ Roaming \ Sublime Text 3 \ Packages \ JSHint Gutter 경로에 있습니다. "jquery"를 입력하면 아무 일도 일어나지 않습니다.
Milos

전역 섹션에 변수를 추가하는 것보다 훨씬 더 나은 답변! 이 방법으로 해결하십시오!
Matthias Kleine

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/docs/options/#environments
user456584

업데이트를 포함하도록 답변을 수정했습니다 감사합니다 @ user456584
James Harrington

8

WebStorm, PyCharm, RubyMine 또는 IntelliJ IDEA와 같은 IntelliJ 편집기를 사용하는 경우 :

파일 / 설정 / 자바 스크립트 / 코드 품질 도구 / JSHint의 환경 섹션에서 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개체의 인스턴스 하나만 사용 합니다.
  • window속성이나 메서드를 호출 할 때 추적을 삭감 하여 범위 체인의 값 비싼 통과 window.alert()( 예 : (빠른) 대 alert()(느린))를 방지합니다.
  • "네임 스페이스"와 격리 (글로벌은 사악함)를 통한 기능의 로컬 범위. 이 코드를 별도의 스크립트로 분할해야하는 경우 해당 스크립트 각각에 대한 하위 모듈을 만들어 하나의 기본 모듈로 가져올 수 있습니다.

2
이것은 내가 사용하는 패턴이지만 원래 문제를 해결하지는 않습니다. JSHint는 변수가 마지막 줄에 정의되어 있지 않다고 여전히 불평합니다 ( "}(window))예 : "jQuery 및 Highcharts에도 문제가 있음). 파일의 전역을 정의하는 것 외에 다른 방법을 찾지 못했습니다 그런 다음 목적을
이길 수

@myrosia browser: true는 JSHint 에게 브라우저 환경 ( window이미 정의 된 곳 ) 을 기대 한다고 알려줍니다 .
sam

나는이 접근법을 좋아한다!
jethroo

2

IntelliJ 편집기를 사용하는 경우

  • 환경 설정 / 설정
    • 자바 스크립트
      • 코드 품질 도구
        • JSHint
          • 사전 정의 (아래)에서 설정을 클릭 하십시오.

예를 들어 어떤 것을 입력해도 console:false목록 (.jshintrc)뿐만 아니라 전역에 추가 할 수 있습니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.