Похоже, что ESLint не может проанализировать файл ".eslintrc.js" .

Действия по воспроизведению: Я создал новый проект TypeScript "hello world" следующим образом:

# Make a new directory for our new project
mkdir test
# Go into the new directory
cd test
# Create a "package.json" file
npm init --yes
# Install TypeScript
npm install typescript --save-dev
# Install ESLint (the linter)
npm install eslint --save-dev
# Install the Airbnb ESLint config (the most popular linting config in the world)
npm install eslint-config-airbnb-typescript --save-dev
# The import plugin for ESLint is needed for the Airbnb config to work properly with TypeScript
npm install eslint-plugin-import@^2.22.0 --save-dev
# The TypeScript plugin for ESLint is needed for the Airbnb config to work properly with TypeScript
npm install @typescript-eslint/eslint-plugin@^4.2.0 --save-dev
# Create the config file for TypeScript
touch tsconfig.json
# Create the config file for ESLint
touch .eslintrc.js
# Create the entry point for our TypeScript application
touch main.ts

Я заполняю файл "tsconfig.json" следующим (пустая конфигурация / конфигурация по умолчанию):

{}

Я заполняю файл ".eslintrc.js" следующим образом, как указано в документация Airbnb:

module.exports = {
  extends: ['airbnb-typescript/base'],
  parserOptions: {
    project: './tsconfig.json',
  },
};

Заполняю "main.ts" следующим:

const foo = 'bar';

Затем, когда я запускаю npx eslint main.ts, он правильно генерирует следующую ошибку:

  1:7  error  'foo' is assigned a value but never used  @typescript-eslint/no-unused-vars

Таким образом, ESLint работает правильно. Однако когда я запускаю npx eslint .eslintrc.js, я получаю следующую ошибку:

  0:0  error  Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: .eslintrc.js.
The file must be included in at least one of the projects provided

Эта ошибка также появляется в VSCode всякий раз, когда я открываю файл ".eslintrc.js". Ошибка должна быть устранена, чтобы ESLint мог линковать остальную часть файла. (Чтобы прояснить, я хочу, чтобы файл ".eslintrc.js" был линирован так же, как я хочу, чтобы мой исходный код TypeScript был линтингом - например, имел отступ в 2 пробела и так далее.)

Дополнительная информация: я использую Windows 10 LTSC с Node v14.8.0 и npm версии 6.14.7.

2
James 9 Окт 2020 в 01:36

1 ответ

Лучший ответ

Когда вы используете правила eslint на основе машинописного текста (когда ваша конфигурация eslint включает конфигурацию "parserOptions.project"), eslint выдает ошибку, если вы пытаетесь связать файл, который не является одним из файлов, включенных в проект машинописного текста. .

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

Решением для линтинга файлов, которые не являются частью вашего проекта TS, является создание tsconfig, который расширяет ваш «настоящий» tsconfig, но включает все файлы, которые вы хотите линтировать. Обычно это называется tsconfig.eslint.json и выглядит так:

// Special typescript project file, used by eslint only.
{
    "extends": "./tsconfig.json",
    "include": [
        // repeated from base config's "include" setting
        "src",
        "tests",

        // these are the eslint-only inclusions
        ".eslintrc.js",
    ]
}

А в вашем .eslintrc.js вы измените project: './tsconfig.json' на project: './tsconfig.eslint.json'.

Это должно устранить ошибку и позволить линковать файл .eslintrc.js.

10
Retsam 9 Окт 2020 в 15:39