ESLint- "창"이 정의되지 않았습니다. package.json에서 전역 변수를 허용하는 방법


187

전역 창 객체에 속성을 할당하고 있지만 eslint를 실행하면 다음과 같은 결과가 나타납니다.

"창"이 정의되지 않았습니다

나는 이것을 eslint 문서에서 본다 :

다음은 테스트중인 규칙을 트리거하지 않아야하는 코드의 전역 변수로 window를 정의합니다.

valid: [
  {
    code: "window.alert()",
    globals: [ "window" ]
  }
]

"window"를 전역 변수로 허용하도록 eslint를 갖도록 package.json 파일에 이와 같은 것을 추가하려고 시도했지만 뭔가 잘못해야합니다. 문서에서 별도의 파일에서 이와 같은 작업을 수행해야 할 것 같지만 package.json 파일에서 허용되는 전역 변수를 정의하는 방법이 있습니까?


참고로, 노드를 사용 중이고 ESLint가 인식 하도록하려면 구성에서 설정되어 global있는지 확인 "node": true해야 "env"합니다.
Joshua Pinter

답변:


309

environment: browser를 포함 하는 내장 이 있습니다 window.

.eslintrc.json:

"env": {
    "browser": true,
    "node": true,
    "jasmine": true
  },

자세한 정보 : http://eslint.org/docs/user-guide/configuring.html#specifying-environments

또한 아래 package.jsonchevin99 의 답변을 참조하십시오 .


물론 최고의 답변입니다. 감사합니다. 나는 그것을 생각조차하지 않았다 :)
Knight Yoshi

4
이런 경우에 다른 사람이 나처럼 잡힐 :이 안에 들어 있어야 .eslintrc하지package.json
클레이의 항아리

하나의 파일에만 적용 할 수있는 방법이 있습니까?
AnnanFay

Carles Alcolea답변 에서 다음을 발견했습니다 .이 파일의 맨 위에 추가하십시오./* eslint-env browser */
Laoujin

102

이 페이지에서 찾았습니다 : http://eslint.org/docs/user-guide/configuring

package.json에서는 다음과 같이 작동합니다.

"eslintConfig": {
  "globals": {
    "window": true
  }
}

63
올바른 방법은 "env": { "browser": true}를 사용하는 것입니다.
Nicolas

@Nicolas, 그렇습니다. 아마 내가 처음 찾은 것이면 제안한 방법을 사용했을 것입니다. 그러나이 대답은 package.json에서 eslint 구성을 할 수 있음을 나타내는 데 적어도 유용합니다.
chevin99

4
/ * global angular : true * /
Mirko

문제는 특히 비록 package.json 파일을 사용하는 방법을 묻습니다
virtualLast

59

.eslintrc프로젝트 루트에 추가하십시오 .

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}

어떻게 든 eslingConfig를 package.json에 배치하면 개념적으로 잘못 된 것을 제외하고는 작동하지 않았습니다. .eslintrc.json에 추가하면 작동합니다.
Petrunov

1
@Petrunov는 .eslintrc.json단지 수 있습니다.eslintrc
커크 Strobeck

이것은 내가 겪고있는 한 경우에는 효과가 없습니다. 크롬 확장 프로젝트에 gulp와 함께 eslint를 사용하고 있습니다. 전역에서 나는 "chrome"을 설정했습니다 : true이며 여전히 인식 할 수없는 전역에 대한 오류가 발생합니다.
Stephen Tetreault

42

귀하의 .eslintrc.json는 아래의 텍스트를 포함해야합니다.
이런 식으로 ESLint는 전역 변수에 대해 알고 있습니다.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}

14

그가 인라인 버전을 요구하지 않는다는 것을 알고 있습니다. 그러나이 질문에 거의 100k 방문이 있었고 여기를 찾고 있었으므로 다음 동료 코더를 위해 여기에 남겨 두겠습니다.

ESLint가 --no-inline-config플래그 와 함께 실행되지 않는지 확인하십시오 (이것이 익숙하지 않다면 사용하는 것이 좋습니다). 그런 다음 코드 파일에 이것을 작성하십시오 (명확성과 규칙을 위해 파일 위에 작성되었지만 어디서나 작동합니다).

/* eslint-env browser */

이는 ESLint에게 작업 환경이 브라우저라는 것을 알려주므로 이제 브라우저에서 사용할 수있는 것을 알고 그에 따라 조정합니다.

많은 환경 이 있으며 인라인과 같이 동시에 둘 이상을 선언 할 수 있습니다.

/* eslint-env browser, node */

거의 항상 특정 환경을 사용하는 경우 ESLint의 구성 파일에서 설정 하고 잊어 버리는 것이 가장 좋습니다 .

에서 자신의 문서 :

환경은 사전 정의 된 전역 변수를 정의합니다. 사용 가능한 환경은 다음과 같습니다.

  • browser -브라우저 전역 변수.
  • node -Node.js 전역 변수 및 Node.js 범위.
  • commonjs -CommonJS 전역 변수 및 CommonJS 범위 지정 (Browserify / WebPack을 사용하는 브라우저 전용 코드에 사용).
  • shared-node-browser -노드와 브라우저에 공통 인 글로벌.

[...]

환경 외에도 원하는 것을 무시할 수 있습니다. 사용에 대해 경고 console.log()하지만 경고를 원하지 않는다면 인라인하십시오.

/* eslint-disable no-console */

최상의 코딩 방법 을 위해 권장되는 규칙을 포함하여 모든 규칙 목록을 볼 수 있습니다 .


2

Angular 를 사용하는 경우 다음을 사용하여 얻을 수 있습니다.

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.