Общая конфигурация eslint не может найти модули узлов

У меня есть несколько приложений, в которых я хотел бы использовать одну и ту же конфигурацию eslint:

- project_root/
    - app1/
        - node_modules/
        - eslint.rc
    - app2/
        - node_modules/
        - eslint.rc
    - app3/
        - node_modules/
        - eslint.rc
    - eslint.rc

Каждое приложение имеет одинаковую конфигурацию:

module.exports = {
  extends: [
    '../.eslintrc',
  ],
};

И в корне хочу, чтобы все было настроено:

module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/eslint-recommended',
    'plugin:@typescript-eslint/recommended',
    'prettier',
    'prettier/@typescript-eslint',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  rules: {},
};

Но теперь каждое приложение выдает ошибку из-за того, что не может найти модули узлов:

Не удалось загрузить парсер '@ typescript-eslint / parser', объявленный в '.eslintrc.js »../.eslintrc': Не удается найти модуль '@ typescript-eslint / parser' '.

У меня нет node_modules в корне, и я бы хотел этого избежать.


person Mick    schedule 20.03.2020    source источник
comment
Вам нужно явно указать путь к вашей папке node_modules. любой из них будет работать ../node_modules/@typescript-eslint/parser /node_modules/@typescript-eslint/parser /node_modules/@typescript-eslint/parser node_modules/@typescript-eslint/parser одинаково для зависимостей других узловых модулей.   -  person Farzam Babar    schedule 16.02.2021


Ответы (1)


В итоге я обратился в службу поддержки ESLint Discord и нашел там ресурсы, которые помогли мне настроить общую конфигурацию.

https://github.com/eslint/eslint/issues/3458

Поскольку я использую RushJS для управления своим монорепозиторием, я использую патч для ESLint, чтобы позволить пакету npm с общей конфигурацией загружать плагины локально. Подробнее здесь: https://www.npmjs.com/package/@rushstack/eslint-patch.

Короче говоря, создайте пакет NPM в своем монорепозитории - вам не нужно загружать его в NPM, если вы связываете локально (RushJS делает это, но я думаю, вы также можете сделать это с простым NPM). Поместите свою конфигурацию в этот пакет - информация здесь: https://eslint.org/docs/user-guide/configuring/configuration-files#using-a-shareable-configuration-package Добавьте любые плагины, указанные в вашей общей конфигурации, как зависимости этого пакета. Используя упомянутый выше eslint-patch, ESLint загрузит плагины из этого пакета, вместо того, чтобы вам нужно было устанавливать их в каждом проекте.

Это сработало для меня. Надеюсь, это поможет другим ...

person Raddish IoW    schedule 17.02.2021