eslint + jsconfig + псевдонимы путей к модулям nextjs (импорт абсолютного пути - @)

Я пытаюсь импортировать файлы, используя пользовательские псевдонимы, следуя документации nextjs.

Мой текущий подход

от

import Header from '../../../components/Header';

к

import Header from '@components/Header';

Получаю ожидаемый результат. Но eslint выдает следующую ошибку:

  • невозможно разрешить путь к модулю (eslint - import/no unresolved)

И я попытался добавить следующую строку в свой файл eslintrc, чтобы устранить ошибку

    settings: {
    'import/resolver': {
      node: {
        paths: ['src'],
      },
    },
  },

Но все же eslint выдает ту же ошибку.

Как правильно решить эту проблему?

Заранее спасибо...

Примечание: я не хочу удалять eslint, и мне нужны псевдонимы импорта @components

4 ответа

Решение

Наконец, покопавшись во множестве ответов GitHub и т.д...

Внутри вашего файла eslintrc... добавьте следующие псевдонимы

    settings: {
    'import/resolver': {
      alias: {
        map: [
          ['@components', '../../../components/'],
          ['@images', '../../../assets/images/'],
        ],
        extensions: ['.js', '.jsx'],
      },
    },
  },

а также для исправления ошибки потока внутри вашего файла flowconfig добавьте name_mapper

module.name_mapper='^@components' ->'<PROJECT_ROOT>/../../../components'
module.name_mapper='^@images' ->'<PROJECT_ROOT>/../../../assets/images'

Вам также необходимо установить npm i -D eslint-import-resolver-typescript а затем добавьте ниже в файл конфигурации eslint:

      "settings": {
    "import/resolver": {
      "typescript": {} // this loads <rootdir>/tsconfig.json to eslint
    },
}

Ссылка: https://gourav.io/blog/nextjs-cheatsheet

Вы можете попробовать добавить свои собственные пути в tsconfig.json/jsconfig.json, вот так:

  • Добавить baseUrl в вашем compilerOptions (в моем случае это "baseUrl": ".")
  • Добавьте свои пути в paths объект:
"paths": {
   "components": ["components/*"],
}

Мне не удалось решить проблему описанными выше способами.

Однако нам удалось решить проблему, используя следующую библиотеку.

https://www.npmjs.com/package/eslint-import-resolver-alias

      npm install eslint-plugin-import eslint-import-resolver-alias --save-dev

jsconfig.json

      {
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
    }
  }
}

.eslintrc.json

      {
...
  "settings": {
    "import/resolver": {
      "alias": {
        "map": [["@", "./src"]],
        "extensions": [".ts", ".js", ".jsx", ".json"]
      }
    }
  }
}

пример импорта

      import Header from '../components/Header';

to

import Header from '@/components/Header';
Другие вопросы по тегам