ESLint - "ventana" no está definida. Cómo permitir variables globales en package.json

187

Estoy asignando una propiedad al objeto de ventana global, pero cuando ejecuto eslint, obtengo esto:

"ventana" no está definida

Veo esto aquí en los documentos de eslint :

A continuación, se define la ventana como una variable global para el código que no debe activar la regla que se está probando:

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

Intenté agregar algo como esto al archivo package.json para que eslint allow "window" como una variable global, pero debo estar haciendo algo mal. Según los documentos, parece que podría necesitar hacer algo como esto en un archivo separado, pero ¿hay alguna manera de definir algunas variables globales permitidas directamente en el archivo package.json?

chevin99
fuente
Para su información, si está utilizando un nodo y desea que ESLint lo reconozca global, debe asegurarse de que "node": trueesté configurado en su "env"configuración.
Joshua Pinter

Respuestas:

310

Hay un incorporado environment: browserque incluye window.

Ejemplo .eslintrc.json:

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

Más información: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

También vea la package.jsonrespuesta de chevin99 a continuación.

Laoujin
fuente
Absolutamente la mejor respuesta, gracias. Ni siquiera pensé en eso :)
Knight Yoshi
44
En caso de que alguien más quede atrapado como yo: Esto debería estar en .eslintrcnopackage.json
A Jar of Clay
¿Hay alguna manera de hacer que esto solo se aplique a un archivo?
AnnanFay
Encontré lo siguiente en la respuesta de Carles Alcolea a continuación : Agregue en la parte superior de este archivo:/* eslint-env browser */
Laoujin
102

Lo encontré en esta página: http://eslint.org/docs/user-guide/configuring

En package.json, esto funciona:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
chevin99
fuente
63
la forma correcta de hacerlo es usar "env": {"browser": true}
Nicolas
@Nicolas, sí, probablemente habría utilizado el método que sugirió si eso es lo que encontré primero, pero esta respuesta es al menos útil para mostrar que puede tener su configuración de eslint en package.json.
chevin99
44
También es posible alinear globals para eslint así: / * global angular: true * /
Mirko
sin embargo
virtualLast
59

Agregar .eslintrcen la raíz del proyecto.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
Kirk Strobeck
fuente
De alguna manera, colocar eslingConfig en package.json no funcionó para mí (aparte de estar conceptualmente equivocado). Sin embargo, agregarlo en .eslintrc.json funciona.
Petrunov
1
@Petrunov .eslintrc.jsonpuede simplemente ser.eslintrc
Kirk Strobeck el
esto no funciona en un caso que estoy experimentando: estoy usando eslint con gulp para un proyecto de extensión de Chrome. en globales establezco "chrome": verdadero y aún arroja un error acerca de que es un global no reconocido.
Stephen Tetreault
42

Su .eslintrc.json debe contener el texto a continuación.
De esta manera, ESLint conoce sus variables globales.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
Sergey Andreev
fuente
14

Soy consciente de que no está pidiendo la versión en línea . Pero como esta pregunta tiene casi 100k visitas y me caí aquí buscando eso, la dejaré aquí para el próximo compañero codificador:

Asegúrese de que ESLint no se ejecute con la --no-inline-configbandera (si esto no le suena familiar, es probable que esté listo). Luego, escriba esto en su archivo de código (para mayor claridad y convención, está escrito en la parte superior del archivo pero funcionará en cualquier lugar):

/* eslint-env browser */

Esto le dice a ESLint que su entorno de trabajo es un navegador, por lo que ahora sabe qué cosas están disponibles en un navegador y se adapta en consecuencia.

Hay muchos entornos y puede declarar más de uno al mismo tiempo, por ejemplo, en línea:

/* eslint-env browser, node */

Si casi siempre usa entornos particulares, es mejor configurarlo en el archivo de configuración de su ESLint y olvidarse de él.

De sus documentos :

Un entorno define variables globales que están predefinidas. Los entornos disponibles son:

  • browser - variables globales del navegador.
  • node - Variables globales de Node.js y alcance de Node.js.
  • commonjs - Variables globales de CommonJS y alcance de CommonJS (use esto para el código solo del navegador que usa Browserify / WebPack).
  • shared-node-browser - Globales comunes tanto a Node como a Browser.

[...]

Además de los entornos, puede hacer que ignore todo lo que desee. Si te advierte sobre el uso console.log()pero no quieres que te lo avisen, solo en línea:

/* eslint-disable no-console */

Puede ver la lista de todas las reglas , incluidas las reglas recomendadas para las mejores prácticas de codificación .

Carles Alcolea
fuente
2

Si está utilizando Angular , puede hacerlo con:

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