Как настроить плоскую конфигурацию ESLint с помощью Typescript в VSCode? (без FlatCompat)

Как мне:

  • переход на плоскую конфигурацию ESLint
  • настроить конфигурацию линтинга для Typescript в новом формате
  • заставить расширение ESLint снова работать в VSCode
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
2 181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я боролся с этим пару часов, прежде чем нашел довольно чистое решение. Он не зависит от FlatCompat (который сохранит устаревшую конфигурацию), поэтому решил задокументировать это здесь для пользы других, столкнувшихся с той же проблемой:

Плоская конфигурация ESLint сильно отличается от предыдущего формата. Поначалу это сводило меня с ума, но на самом деле после щелчка все становится немного проще. Чтобы понять «плоскую конфигурацию», мне помогли следующие указатели:

  • Конфиг — это не что иное, как массив объектов. Это проще, чем предыдущий формат, но поначалу может быть неочевидно.
  • Каждый объект в массиве может определять любую конфигурацию ESLint, которую он хочет.
  • Каждый объект может ориентироваться на определенные файлы, включая или игнорируя набор файлов (полезно, потому что .eslintignore больше не доступен)
  • К каждому проверяемому файлу будут применены все соответствующие конфигурации - я верю в том порядке, в котором они появляются в массиве.

Настройка VSCode — на момент написания вам понадобится:

  • Плагин ESlint v3.0.5 или выше (в настоящее время для этого требуется «переключиться на предварительную версию») на странице установки плагина.
  • Добавьте "eslint.useFlatConfig": true к своему settings.json (ранее было eslint.experimental.useFlatConfig)

Установите следующие зависимости:

    yarn add --dev \
      eslint \
      @eslint/js \
      typescript-eslint \
      --

Для начала используйте следующий файл eslint.config.js (найдите его рядом с package.json). Это обеспечивает значения по умолчанию из https://typescript-eslint.io/getting-started/. Эта конфигурация дополнительно позволяет добавлять игнорируемые файлы, что полезно, поскольку .eslintignore больше не доступен. Обратите внимание, что конфигурация представляет собой «просто Javascript», поэтому вы можете вносить дополнительные изменения. Здесь используется module.exports, что позволяет избежать необходимости добавлять type: "module" к package.json:

    const eslint = require('@eslint/js');
    const tseslint = require('typescript-eslint');

    const ignores = [
      '**/*.js',
    ];

    module.exports = tseslint.config(
      {
        ...eslint.configs.recommended,
        ignores,
      },
      ...tseslint.configs.recommended.map((config) => ({
        ...config,
        ignores,
      })),
    );

Плюсы:

  • Как только я перестал ругаться, я понял, что на самом деле это довольно чисто, даже если это и съело два часа моей жизни, я не был готов выделить бюджет на переход.
  • Конфигурация выше намного меньше, чем липкое гнездо вещей, которые я накопил в старой конфигурации.

Против:

  • Раньше я использовал конфигурацию AirBnB, но решил, что мне нужно ее сбросить, потому что она (пока) недоступна в формате плоской конфигурации.
  • Применение другого набора правил линтинга означало множество (в основном простых) изменений в моей кодовой базе.

Надеюсь, это сэкономит вам время на выяснение того, как осуществить переход.

По умолчанию для eslint и esm используется eslint.config.mjs. Было бы здорово, если бы этот ответ был обновлен, чтобы использовать значение по умолчанию, поскольку этот ответ вообще не помогает с этой конфигурацией.

Jeffrey Tillwick 18.07.2024 21:19

Спасибо @JeffreyTillwick, я не знаком с этим значением по умолчанию. Этот ответ был моей «стратегией выживания», которая, как я надеялся, поможет другим в аналогичной ситуации. Было бы здорово, если бы кто-нибудь добавил пример, который подойдет для этого.

David Carboni 18.07.2024 22:22

Другие вопросы по теме

Eslint Выдает ошибку: не определять компоненты во время рендеринга
Проблема перехода на eslint 9.0.0
Проблема «В настоящее время используется версия TypeScript, которая официально не поддерживается @typescript-eslint/typescript-estree» после обновления Nuxt
Как предотвратить использование только чисел if/else условий (правило ESLint?): например. if (myNumber) { /* ... */ }
Плоский файл конфигурации с конфигурациями из устаревшей ошибки совместимости eslintrc
Невозможно обеспечить ограниченный импорт в проекте TypeScript, несмотря на настройку baseUrl и разрешение
Почему TypeScript предполагает, что объект документа всегда доступен?
Как показать все ошибки файлов в приложении реагирования с помощью eslint с помощью однострочного кода в сценариях в package.json?
Получение ошибки проверки no-var-requires
Включение рекомендуемой конфигурации TypeChecked приводит к тому, что линтер проверяет свой файл конфигурации и выдает ошибку