ESLint - “janela” não está definida. Como permitir variáveis ​​globais no package.json

186

Estou atribuindo uma propriedade ao objeto de janela global, mas quando executo o eslint, recebo o seguinte:

"window" não está definido

Eu vejo isso aqui nos documentos do eslint :

a seguinte janela define como uma variável global para código que não deve acionar a regra que está sendo testada:

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

Tentei adicionar algo assim ao arquivo package.json para que o eslint permita "window" como uma variável global, mas devo estar fazendo algo errado. A partir dos documentos, parece que talvez eu precise fazer algo assim em um arquivo separado, mas existe uma maneira de definir algumas variáveis ​​globais permitidas diretamente no arquivo package.json?

chevin99
fonte
FYI, se você estiver usando o nó e quiser que o ESLint reconheça global, precisará garantir que "node": trueestá definido em sua "env"configuração.
Joshua Pinter

Respostas:

308

Há um builtin environment: browserque inclui window.

Exemplo .eslintrc.json:

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

Mais informações: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

Veja também a package.jsonresposta de chevin99 abaixo.

Laoujin
fonte
Absolutamente a melhor resposta, obrigado. Eu nem sequer pensar nisso :)
Cavaleiro Yoshi
4
Apenas no caso de alguém é pego fora como eu: Esta deve ser em .eslintrcnãopackage.json
Um pote de argila
Existe uma maneira de fazer isso se aplicar apenas a um arquivo?
AnnanFay
Encontrei o seguinte na resposta de Carles Alcolea abaixo : Adicione na parte superior deste arquivo:/* eslint-env browser */
Laoujin
102

Encontrei-o nesta página: http://eslint.org/docs/user-guide/configuring

No package.json, isso funciona:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
chevin99
fonte
62
a maneira correta de fazer isso é usar "env": {"browser": true} #
Nicolas Nicolas
@ Nicolas, sim, eu provavelmente usaria o método que você sugeriu se fosse o que encontrei primeiro, mas essa resposta é pelo menos útil para mostrar que você pode ter sua configuração de eslint no package.json.
chevin99
4
Também é possível globals em linha para eslint assim: / * angular mundial: true * /
Mirko
a questão pede especificamente como usar o arquivo package.json embora
virtualLast
59

Adicione .eslintrcna raiz do projeto.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
Kirk Strobeck
fonte
De alguma forma, colocar eslingConfig no package.json não funcionou para mim (além de estar conceitualmente errado). Adicioná-lo em .eslintrc.json funciona.
Petrunov
1
@Petrunov .eslintrc.jsonpode ser apenas.eslintrc
Kirk Strobeck
isso não funciona em um caso que estou enfrentando - estou usando o eslint com gulp para um projeto de extensão do chrome. em globais defino "chrome": true e ainda gera um erro por ser um global não reconhecido.
Stephen Tetreault
42

Seu .eslintrc.json deve conter o texto abaixo.
Dessa forma, o ESLint conhece suas variáveis ​​globais.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
Sergey Andreev
fonte
13

Sei que ele não está pedindo a versão em linha . Mas como essa pergunta tem quase 100 mil visitas e eu caí aqui procurando por isso, vou deixar aqui para o próximo colega programador:

Verifique se o ESLint não é executado com o --no-inline-configsinalizador (se isso não parecer familiar, é provável que você esteja pronto ). Em seguida, escreva isso no seu arquivo de código (para maior clareza e convenção, está escrito em cima do arquivo, mas funcionará em qualquer lugar):

/* eslint-env browser */

Isso informa ao ESLint que seu ambiente de trabalho é um navegador, então agora ele sabe quais coisas estão disponíveis em um navegador e se adapta de acordo.

Existem muitos ambientes e você pode declarar mais de um ao mesmo tempo, por exemplo, em linha:

/* eslint-env browser, node */

Se você quase sempre usa ambientes específicos, é melhor configurá-lo no arquivo de configuração do ESLint e esquecê-lo.

Dos documentos deles :

Um ambiente define variáveis ​​globais predefinidas. Os ambientes disponíveis são:

  • browser - variáveis ​​globais do navegador.
  • node - Variáveis ​​globais do Node.js. e escopo do Node.js.
  • commonjs - Variáveis ​​globais do CommonJS e escopo do CommonJS (use isso para código somente do navegador que usa o Browserify / WebPack).
  • shared-node-browser - Globais comuns ao Node e ao Browser.

[...]

Além dos ambientes, você pode ignorar o que quiser. Se ele avisar sobre o uso, console.log()mas você não quiser ser avisado, basta inserir:

/* eslint-disable no-console */

Você pode ver a lista de todas as regras , incluindo as regras recomendadas para as melhores práticas de codificação .

Carles Alcolea
fonte
2

Se você estiver usando Angular, poderá desabilitá-lo com:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
AndreaM16
fonte