Подтвердить что ты не робот

Правило ESLint "no-undef" вызывает мое использование Underscore a undefined variable

Я использую Grunt как мой инструмент сборки и ESLint как инструмент для линтинга для приложения, над которым я работаю. Я также использую пакет Underscore Node и использовал его в своем приложении. К сожалению, когда я запускаю ESLint в своем коде, он считает, что _ является переменной undefined в следующей строке:

return _.pluck(objects, nameColumn);

Это ошибка, которая мне дает:

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

Я бы предпочел не отключать правило no-undef для ESLint, и я попытался установить плагин Underscore, но я все еще получаю эту ошибку. Если у кого-то еще есть идеи, что с этим нужно попробовать, я буду очень благодарен!

Если есть какая-то дополнительная информация, которую я могу дать, это поможет любому, кто поможет мне разобраться в этом, просто дайте мне знать!

4b9b3361

Ответ 1

Официальная документация должна дать вам представление о том, как исправить это.

Самое простое исправление - добавить

/* global _ */

в верхней части файла.

Но так как вам нужно будет сделать это для каждого нового js файла, это может вызвать раздражение. Если вы часто используете подчеркивание, я предлагаю вам добавить глобалы в ваш .eslintrc файл, например:

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

И сохраните это как .eslintrc в корне вашего проекта или, возможно, в домашнем каталоге пользователя. Хотя некоторые говорят, что последнее не рекомендуется, иногда это может быть удобно, но вы должны помнить, что вы его там:)


Объяснение приведенного выше правила: "_": false означает, что переменная с именем _ сообщает eslint, что эта переменная определена глобально, и она не будет вызывать ошибки no-undef для этой переменной. Как отметил @sebastian, false означает, что переменная не может быть перезаписана, поэтому код _ = 'something else' приведет к ошибке no-global-assign. Если бы вы вместо этого использовали "_": true (это был мой предыдущий ответ), это означает, что значение может быть повторно назначено, и упомянутая выше ошибка не будет возникать.

Но имейте в виду, что это произойдет, только если вы назначаете напрямую глобальную переменную, как показано в примере. Вы все еще можете тень, и эслинт ничего не скажет. Например, эти фрагменты не дают no-global-assign:

const _ = 'haha I broke your _' 

или как имя аргумента функции, например.

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}