【问题标题】:Vue 3 on Vite.js with Eslint — Unable to resolve path to module eslint(import/no-unresolved)Vue 3 on Vite.js with Eslint — 无法解析模块 eslint 的路径(import/no-unresolved)
【发布时间】:2021-08-22 09:07:55
【问题描述】:

我在 Vite.js 上使用 Vue 3 和 Eslint + Airbnb 配置。 Airbnb config 有一条规则eslint(import/no-unresolved),很好,但是 Eslint 不知道如何解析别名路径。

我想为路径使用别名——例如: import TableComponent from '@/components/table/TableComponent.vue'˙

环境采用纯 JavaScript。

我设法设置了我的vite.config.js,以便应用可以解析如下路径:

import path from 'path';
import { defineConfig } from 'vite';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: [{
        find: "@", replacement: path.resolve(__dirname, 'src')
      },],
  },
});

Vue 应用就是这样工作并正确解析导入路径,但 Eslint 一直报错:Unable to resolve path to module eslint(import/no-unresolved)

我如何以及在哪里可以告诉 Eslint 如何解析别名?

我尝试过: install eslint-plugin-import eslint-import-resolver-alias --save-dev

// .eslintrc.js

// ...
extends: [
    'eslint:recommended',
    'plugin:import/recommended',
    'airbnb-base',
    'plugin:vue/vue3-strongly-recommended',
],

settings: {
    'import/resolver': {
      alias: {
        map: [
          ['@', 'src'],
        ],
      },
    },
  },

但这不起作用。


编辑:
解决了这个问题,如果你像我一样使用纯 JavaScript,请查看接受的答案。

如果您使用的是 TypeScript,请查看 Seyd's answer 是否可以帮助您。

【问题讨论】:

    标签: vue.js path eslint eslintrc vite


    【解决方案1】:

    如果有人遇到这个问题,这适用于我的情况*:

    settings: {
        'import/resolver': {
          alias: {
            map: [
              ['@', './src'],
            ],
          },
        },
      },
    

    *在我的例子中,Vue 的根目录是 'src' 目录,而 Eslint 的根目录更高一级,所以它需要 './src' 路径。

    非常感谢@https://github.com/aladdin-add 通过 github 问题的回答!

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,即使我修复了 src 路径,它仍然存在问题。在我添加扩展之前它没有工作:

        "settings": {
          "import/resolver": {
            "alias": {
              "map": [
                ["@", "./src"]
              ],
      
              "extensions": [".js",".jsx"] <--- HERE
            }
          }
        },
      

      【讨论】:

        【解决方案3】:

        1.在 vite.config.js 中使用和导出别名

        // vite.config.js
        
        import { resolve } from 'path';
        
        import { defineConfig } from 'vite';
        
        export const aliases = {
            '@': resolve(__dirname, './src'),
            '@u': resolve(__dirname, './src/utils'),
        };
        
        export default () => defineConfig({
          // ...
          resolve: {
              alias: aliases,
          },
        })
        

        2。使用 ES 模块支持创建 .eslintrc。(感谢 Morgan's answer

        2.1npm i esm -D

        2.2 为.eslintrc.js 创建同级 — .eslintrc.esm.js

        2.3 将您的 ESLint 配置放入 .eslintrc.esm.js

        // .eslintrc.esm.js
        
        export default {
          root: true,
          extends: ['@vue/airbnb', 'plugin:vue/recommended'],
          // ...
        }
        

        2.4 在.eslintrc.js 内包含以下代码:

        const _require = require('esm')(module)
        module.exports = _require('./.eslintrc.esm.js').default
        

        3.在.eslintrc.esm.js 中导入、映射和使用来自vite.config.js 的别名

        3.1npm i eslint-import-resolver-alias -D

        3.2 在.eslintrc.esm.js 内包含以下代码:

        // .eslintrc.esm.js
        
        import { aliases } from './vite.config';
        
        const mappedAliases = Object.entries(aliases).map((entry) => entry); // [[alias, path], [alias, path], ...]
        
        export default {
          // ...
          settings: {
              'import/resolver': {
                  alias: {
                      map: mappedAliases,
                  },
              },
          },
        }
        

        【讨论】:

          【解决方案4】:

          这解决了我的TypeScript 项目中的问题。

          npm install eslint-import-resolver-typescript
          

          eslint-import-resolver-typescript安装后

          {
            // other configuration are omitted for brevity
            settings: {
              "import/resolver": {
                typescript: {} // this loads <rootdir>/tsconfig.json to eslint
              },
            },
          }
          

          应该添加到.eslintrc.js.

          我的 tsconfig.json(删除不需要的设置)

          {
            "compilerOptions": {
              "target": "esnext",
              "module": "esnext",
              "moduleResolution": "node",
              "strict": false,
              "jsx": "preserve",
              "sourceMap": true,
              "resolveJsonModule": true,
              "esModuleInterop": true,
              "lib": ["esnext", "dom"],
              "types": ["vite/client", "node"],
              "baseUrl": ".",
              "paths": {
                "@/*": ["src/*"]
              },
              "allowJs": true
            },
            "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
            "exclude": ["node_modules"]
          }
          

          查看讨论here

          【讨论】:

          • @DeliciousBacon 这个答案是为寻找TS修复的用户准备的:)
          • 您应该更新您的答案并声明它“解决了使用 TypeScript 时的问题”,因为“这解决了问题”。是模糊的。我会在 OP 中提到它。
          • @DeliciousBacon 是的,就是这样做的。感谢您的反馈。
          【解决方案5】:

          在 .eslintrc.js 中添加

          settings: {
          'import/resolver': {
            alias: {
              map: [['@', './src/']],
              extensions: ['.js', '.vue'],
            },
          },
          

          },

          【讨论】:

            猜你喜欢
            • 2022-06-24
            • 2020-11-25
            • 2019-10-05
            • 2023-01-17
            • 2021-11-10
            • 2022-12-19
            • 2022-01-15
            • 2018-03-17
            • 2021-12-13
            相关资源
            最近更新 更多