使用 webpack 别名显示的 eslint 错误

eslint error showing with webpack alias

在我的 webpack 配置中。我定义了别名

alias: {
            components: 'src/components/',
            config: 'src/config/'
}

当我从这个路径导入模块时,发生了 eslint 错误。

import ShadowWrapper from 'components/ShadowWrapper'

错误'components' 应该在项目的依赖项中列出。 运行 'npm i -S components' 添加它 import/no-extraneous-dependencies

可以使用 eslint-import-resolver-webpack

解决此问题

感谢 Pranav 解决了这个问题!
我在此添加了一些代码 post 以使其对其他人更实用。
首先,在 webpack 配置文件中我定义了这个别名:

alias:{
  components: path.resolve(__dirname, "src", "components")
}

这允许我以这种方式在我的应用程序中导入组件:

import NewsFeed from 'components/NewsFeed'

我已经安装了 eslint-import-resolver-webpack 插件并将下面的代码放入 .eslintrc.js 或 .eslintrc 文件中:

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

在 运行 linter 之后就是这样 我摆脱了 Unable to resolve path to module 'components/NewsFeed' 错误消息
希望对你们中的一些人有所帮助!

以下是对我有用的方法:

  1. 我安装了 eslint-import-resolver-alias 作为开发依赖:

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

  2. Webpack config(在我的例子中是Vue config,通过Vue-cli与Webpack config合并),我添加了一些别名:

     resolve: {
         extensions: ['.js', '.vue', '.json', '.less'],
         alias: {
             Site: path.resolve(__dirname, 'src/site'),
             Admin: path.resolve(__dirname, 'src/admin'),
             Common: path.resolve(__dirname, 'src/common'),
             Assets: path.resolve(__dirname, 'src/common/assets'),
             Configs: path.resolve(__dirname, 'src/common/configs'),
             Style: path.resolve(__dirname, 'src/common/style')
         }
     }
    
  3. .eslintsrc(或 .eslintsrc.js,如果你使用它),我为这些别名添加了插件和映射,如如下:

    "extends": ["plugin:import/recommended"],
    "settings": {
         "import/resolver": {
             "alias": {
                 "map": [
                     ["Site", "./src/site"],
                     ["Admin", "./src/admin"],
                     ["Common", "./src/common"],
                     ["Assets", "./src/common/assets"],
                     ["Configs", "./src/common/configs"],
                     ["Style", "./src/common/style"]
                 ]
             },
             "extensions": [".js", ".less", ".json", ".vue"]
         }
    }
    

为了清楚起见,我添加了一些扩展和一些好的措施,您可以选择不为自己使用。

可选:

如果您使用 VS Code 并希望这些别名与路径智能感知一起使用,请在 jsconfig.json 添加文件root,并指定您的别名路径:

{
    "compilerOptions": {
        "target": "esnext",
        "allowSyntheticDefaultImports": false,
        "baseUrl": "./",
        "paths": {
            "~/*": ["src/*"],
            "Root/*": ["src/*"],
            "Site/*": ["src/site/*"],
            "Admin/*": ["src/admin/*"],
            "Common/*": ["src/common/*"],
            "Assets/*": ["src/common/assets/*"],
            "Configs/*": ["src/common/configs/*"],
            "Style/*": ["src/common/style/*"]
        }
    },
    "exclude": ["node_modules", "dist"]
}

React 和 Typescript 有额外的设置。在官方网站上查看documentation

另一种方式,不在 webpack.config.js.eslintrc 之间映射别名。

您可以使用 eslint-import-resolver-webpack 并像这样设置您的 .eslintrc 文件:

{
  "extends": [
    "@hrplatform"
  ],
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"],
        "moduleDirectory": [
          "node_modules",
          "src"
        ]
      }
    }
  }
}