web-dev-qa-db-fra.com

La règle "no-undef" d'ESLint appelle mon utilisation de Underscore comme une variable non définie

J'utilise Grunt comme outil de création et ESLint comme outil de lintérisation pour une application sur laquelle je travaille. J'utilise également le package Underscore Node, et je l'ai utilisé dans mon application. Malheureusement, lorsque j'exécute ESLint sur mon code, il pense que _ est une variable non définie dans la ligne suivante. :

return _.pluck(objects, nameColumn);

C'est l'erreur que ça me donne:

78:21 error "_" is not defined no-undef

Je préférerais ne pas désactiver la règle no-undef pour ESLint et j'ai essayé d'installer le plug-in Underscore, mais je reçois toujours cette erreur. Si quelqu'un d'autre a des idées sur ce qu'il faut essayer avec cela, je vous en serais très reconnaissant!

S'il y a des informations supplémentaires que je peux donner qui pourraient aider n'importe qui à m'aider à comprendre cela, faites le moi savoir!

65
turner

Le documentation officielle devrait vous donner une idée sur la façon de résoudre ce problème.

La solution la plus simple serait d’ajouter

/* global _ */

en haut de votre dossier.

Mais comme vous devrez le faire pour chaque nouveau fichier js, cela peut devenir agaçant. Si vous utilisez souvent des traits de soulignement, je vous conseillerais de ajouter des éléments globaux à votre fichier .eslintrc , par exemple:

{
    "globals": {
        "_": false
    }
}

Et enregistrez ceci sous le nom .eslintrc Dans la racine de votre projet ou éventuellement dans votre répertoire de base de l'utilisateur. Bien que certains disent que ce dernier n'est pas recommandé, cela peut parfois être pratique, mais vous devez vous rappeler que vous l'avez ici :)


Explication de la règle ci-dessus : "_": false Signifie qu'une variable nommée _ Indique à Eslint que cette variable est définie globalement et il n'émettra aucune erreur no-undef pour cette variable. Comme @sebastian l'a fait remarquer, false signifie que la variable ne peut pas être écrasée. Par conséquent, le code _ = 'something else' Générera une erreur no-global-assign. Si vous utilisiez plutôt "_": true (C'était ma réponse précédente), cela signifie que la valeur peut être réaffectée et que l'erreur mentionnée précédemment ne se produira pas.

Mais gardez à l'esprit que cela ne se produira que si vous affectez directement la variable globale, comme je l'ai montré dans l'exemple. Vous pouvez toujours l'ombre et Eslint ne dira rien. Par exemple, ces extraits ne donneraient pas le no-global-assign:

const _ = 'haha I broke your _' 

ou comme nom d'argument de fonction, par ex.

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}
169
Marko Grešak

Si vous utilisez Jest pour tester - dans votre environnement - dans eslintrc.json

"env":{
    "jest":true
}
5
Leon Africa