ESLint не работает в VS Code?

88

ESLint у меня не работает в VS Code. У меня есть плагин, установленный в VS Code, и сам ESLint как зависимость разработчика в моем package.json, который я также установил.

Я изменил следующий параметр в настройках пользователя VS Code:

{
  "eslint.options": { "configFile": "C:/mypath" }
}

Я использую команду eslint --initдля добавления базового .eslintrc.jsonфайла в основной каталог моего пакета.

Другие люди смогли получить обратную связь ESLint от VS Code, используя тот же пакет с точно таким же файлом конфигурации ESLint.

Я не получил никакой обратной связи при прямом нарушении нескольких правил, которые все были включены в рекомендуемый набор правил, который по умолчанию находится внутри .eslintrc.jsonфайла.

Что мне не хватает?

Изменить: я тестировал использование ESLint через командную строку, и все работало, как ожидалось, с ошибками, обнаруженными там, где они должны были быть, однако эти же ошибки никогда не появлялись в VS Code. Проблема, похоже, связана с VS Code, а не с ESLint.

Джон Лэндон
источник
2
Обратите внимание: если вы успешно установили ESLint , но не получили отклика от ESLint, как вы ожидали, то есть вероятность, что вы забыли инициализировать ESLint . Для этого запустите эту команду из корня вашего проекта./node_modules/.bin/eslint --init

Ответы:

25

Есть несколько причин, по которым ESLint может не предоставлять вам обратную связь. ESLint сначала будет искать ваш файл конфигурации в вашем проекте, и если он не может найти там .eslintrc.json, он будет искать глобальную конфигурацию. Лично я устанавливаю только ESLint в каждый проект и создаю конфигурацию на основе каждого проекта.

Вторая причина, по которой вы не получаете обратную связь, заключается в том, что для получения обратной связи вам необходимо определить свои правила линтинга в файле .eslintrc.json. Если там нет правил или у вас не установлены плагины, вы должны их определить.

EJ Mason
источник
1
Если у вас есть локальный .eslintrc.json, вам не нужно определять свой configFile в настройках.
EJ Mason
3
У меня локальный .eslintrc.jsonфайл уже помещен в основную папку моего проекта, и мои правила расширяют рекомендуемые правила ESLint, которые я тестировал. Я также добавил несколько собственных правил для дальнейшего тестирования, но безуспешно.
John Landon
38
При использовании ESLint напрямую через командную строку все работает правильно, и он находит все ошибки. Проблема здесь, похоже, связана с VS Code, а не с ESLint.
John Landon
3
попробуйте включить eslint в своих настройках "eslint.enable": true. Убедитесь, что у вас глобально не установлен eslint. и попробуйте удалить путь configFile. Вот как я настроил свой vscode. Я сталкиваюсь с множеством проблем, когда устанавливаю eslint глобально и локально.
EJ Mason
3
Для меня проблема заключалась в том, что я не установил расширение ESLint в VSCode.
атулхатри
65

Если ESLint работает в терминале, но не внутри VSCode, это, вероятно, связано с тем, что расширение не может обнаружить как локальные, так и глобальные node_modulesпапки.

Для проверки нажмите Ctrl+ Shift+ Uв VSCode, чтобы открыть Outputпанель после открытия файла JavaScript с известной eslintпроблемой. Если он показывает Failed to load the ESLint library for the document {documentName}.js-или- если на Problemsвкладке отображается ошибка или предупреждение, о котором идет речь eslint, то VSCode не может определить путь.

Если да, то установите его вручную, настроив eslint.nodePathв настройках VSCode ( settings.json). Укажите ему полный путь (например, как "eslint.nodePath": "C:\\Program Files\\nodejs",) - использование переменных среды в настоящее время не поддерживается.
Эта опция задокументирована на странице расширения ESLint .

ParaBolt
источник
спасибо, потратил несколько часов на выяснение, почему eslint теперь работает глобально с vscode
Андрей Войку
Лучший ответ на свете.
Никола Михайлович
52

В моем случае, поскольку я использовал TypeScript с React, исправление заключалось в том, чтобы просто сказать ESLint, чтобы он также проверял эти файлы. Это нужно сделать в ваших пользовательских настройках:

"eslint.validate": [ "javascript", "javascriptreact", "html", "typescriptreact" ],
Симона
источник
3
Работал у меня. (В Windows)
Эллис
1
TypeScript с React здесь тоже работал у меня. Спасибо
ggat
TypeScript с React в Windows, и это тоже сработало для меня.
Питер Бумсма,
27

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

Поместите это в свой .vscode/settings.json

"eslint.workingDirectories": [
    "./backend", 
    "./frontend"
],

спасибо этому парню на github: https://github.com/microsoft/vscode-eslint/issues/696#issuecomment-542592372

PS: полезная команда для .eslintrcвывода списка всех подкаталогов, содержащих исключение / node_modules:

find . .eslintrc | grep .eslintrc | grep -v node_modules

Карл Адлер
источник
7

В моем случае я не установил расширение ESLint в VSCode, что вызывало проблемы. Сделал это, и он снова заработал.

атулхатри
источник
4

У меня сработал перезапуск VSCode.

теданотто
источник
3

Если вы используете глобальную установку ESLint, любые плагины, используемые в вашей конфигурации, также должны быть установлены глобально. Как и для локальной установки. Если вы установили локально и правильно настроили локально, но eslint не работает, попробуйте перезапустить вашу IDE. Это случилось со мной только с VScode.

Оненгие Ричард
источник
Ух! Не знаю, почему это не пришло мне в голову раньше. VSCode не распознавал псевдонимы модулей, определенные в моем файле конфигурации Webpack, и отображал ошибки Eslint, но запуск Eslint из командной строки - нет. Перезапуск VScode устранил проблему!
Джаред Книпп
3

У меня была аналогичная проблема с окнами, но иногда eslint работал (в vscode) иногда нет. Позже понял, что через некоторое время работает нормально. Это было связано с этой проблемой: сервер eslint становится доступным через ~ 3-5 минут.

Установка переменной окружения NO_UPDATE_NOTIFIER=1решила проблему

Чимак
источник
3

Я даю ответ, предполагая, что вы уже определили правила в корневом каталоге локального проекта с помощью .eslintrc и .eslintignore . После установки VSCode Eslint Extension несколько конфигураций, которые необходимо сделать в settings.json для vscode

eslint.enable: true
eslint.nodePath: <directory where your extensions available>

Установка eslint local в качестве зависимости проекта - последний ингредиент для работы. не рекомендуется устанавливать eslint как глобальный, так как это может конфликтовать с локальным установленным пакетом.

LasithaMD
источник
3

У меня была аналогичная проблема с eslint, говоря, что это «… еще не проверяет какие-либо файлы», но в консоли проблем VS Code ничего не сообщалось. Однако после обновления VS Code до последней версии (1.32.1) и перезапуска eslint начал работать.

ССН
источник
3

В моем случае ESLint был отключен в моем рабочем пространстве. Пришлось включить его в настройках расширений vscode.

Мелхия
источник
3

Поскольку вы можете успешно выполнить lint через командную строку, проблема, скорее всего, связана с настройкой плагина ESLint .

Предполагая, что расширение установлено правильно, проверьте все свойства конфигурации, связанные с ESLint, как в проекте (рабочая область), так и в пользовательском (глобальном) файле settings.json.

Есть несколько вещей, которые могут быть неправильно сконфигурированы в вашем конкретном случае; для меня был отключен JavaScript после работы с TypeScript в другом проекте, и мой global settings.json выглядел следующим образом:

"eslint.validate": [
  { "language": "typescript", "autoFix": true }
 ]

Отсюда это было простое исправление:

"eslint.validate": [
  { "language": "javascript", "autoFix": true },
  { "language": "typescript", "autoFix": true }
]

Это настолько распространено, что кто-то написал прямое сообщение в блоге о том, что ESLint не работает в VS Code . Я бы просто добавил: проверьте ваш глобальный пользователь settings.json перед тем, как переопределить конфигурацию локальной рабочей области.

dmudro
источник
Для меня, помимо того, что вы указали, мне пришлось добавить "javascriptreact"и, "typescriptreact"поскольку мой проект использует React.
oyalhi
Отличный момент. javascriptи javascriptreactявляются значениями по умолчанию, но я думаю, вам нужно будет *scriptreactдобавить их обратно для файлов JSX.
dmudro
2

В моем случае установка eslint validate на: "eslint.validate": ["javascript", "javascriptreact", "html", "typescriptreact"] выполнила свою работу.

Томаш Острога
источник
2

Я использую вместе Use Prettier Formatter и ESLint VS Code для линтинга и форматирования кода.

введите описание изображения здесь

введите описание изображения здесь

теперь установите некоторые пакеты с помощью данной команды, если требуется больше пакетов, они будут отображаться с командой установки как ошибка в терминале для вас, пожалуйста, установите их также.

npm i eslint prettier eslint@^5.16.0 eslint-config-prettier eslint-plugin-prettier eslint-config-airbnb eslint-plugin-node eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks@^2.5.0 --save-dev

теперь создайте новое имя файла .prettierrc в домашнем каталоге вашего проекта, используя этот файл, вы можете настроить параметры расширения prettier, мои настройки ниже:

{
  "singleQuote": true
}

Теперь, что касается ESlint, вы можете настроить его в соответствии с вашими требованиями, я советую вам перейти на веб-сайт Eslint, чтобы увидеть правила ( https://eslint.org/docs/rules/ )

Теперь создайте файл с именем .eslintrc.json в домашнем каталоге вашего проекта, используя этот файл, вы можете настроить eslint, мои конфигурации ниже:

{
  "extends": ["airbnb", "prettier", "plugin:node/recommended"],
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error",
    "spaced-comment": "off",
    "no-console": "warn",
    "consistent-return": "off",
    "func-names": "off",
    "object-shorthand": "off",
    "no-process-exit": "off",
    "no-param-reassign": "off",
    "no-return-await": "off",
    "no-underscore-dangle": "off",
    "class-methods-use-this": "off",
    "prefer-destructuring": ["error", { "object": true, "array": false }],
    "no-unused-vars": ["error", { "argsIgnorePattern": "req|res|next|val" }]
  }
}
Лорд
источник
1

В моем случае это не сработало, потому что я добавил в проект только одну папку монорепозитория, хотя у меня были package.jsonнастроены и расширение. Я работал только тогда, когда добавлял весь проект (содержащий package.jsonфайл) в VS Code.

Shivangg
источник
1

Если вы разрабатываете проект с eslint в качестве зависимости package.json, обязательно запустите его npm install. Это исправило это для меня.

JBaczuk
источник
1

Что касается меня, я случайно отключил ESLint, когда он показал какое-то приглашение.

Выполнение следующих шагов исправило это для меня

  1. Shift + Command + P и выберите ESLint: Disabled ESLint
  2. Закрыть vscode
  3. Shift + Command + P и выберите ESLint: Show Output Channel
Абдул Ваджид
источник
0

Перейдите в файл settings.json, добавьте следующее и исправьте eslint.nodepath. Адаптируйте его к своим предпочтениям.

 // PERSONAL
  "editor.codeActionsOnSaveTimeout": 2000,
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  },
  "editor.fontSize": 16,
  "editor.formatOnSave": true,
  "explorer.confirmDragAndDrop": true,
  "editor.tabSize": 2,
  "eslint.codeAction.showDocumentation": {
    "enable": true
  },
  "eslint.nodePath": "C:\\{path}",
  "eslint.workingDirectories": ["./backend", "./frontend"],
DJN
источник
0

В моем случае .eslintrc.jsonфайл находился внутри .vscodeпапки. Как только я переместил его в корневую папку, ESLint начал работать правильно.

Дино Бансиган
источник