带有Webpack别名的eslint错误显示

Pra*_*ayi 5 javascript eslint webpack

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

alias: {
            components: 'src/components/',
            config: 'src/config/'
}
Run Code Online (Sandbox Code Playgroud)

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

import ShadowWrapper from 'components/ShadowWrapper'
Run Code Online (Sandbox Code Playgroud)

错误的“组件”应在项目的依赖项中列出。运行“ npm i -S组件”以将其添加为导入/无外部依赖关系

Pra*_*ayi 7

这个问题可以通过使用eslint-import-resolver-webpack 解决

  • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下也有用:[在链接周围添加上下文](//meta.stackexchange.com/a/8259) 这样您的其他用户就会知道它是什么以及为什么它在那里,然后引用您链接到的页面中最相关的部分,以防目标页面不可用。[仅是链接的答案可能会被删除。](//stackoverflow.com/help/deleted-answers) (4认同)
  • 通常,指向工具或库的链接[应附有使用说明、链接资源如何适用于问题的具体说明以及一些示例代码](//meta.stackoverflow.com/a/251605/584192) . (2认同)

小智 6

这是对我有用的:

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

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

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

     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')
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  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"]
         }
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

可选的:

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

{
    "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"]
}
Run Code Online (Sandbox Code Playgroud)

React 和 Typescript 有额外的设置。检查官方网站上的文档


Prz*_*cki 5

谢谢Pranav为这个问题提供的解决方案!
我在这篇文章中添加了一些代码,以使其对其他人更加实用。
首先,在webpack配置文件中,我定义了这个别名:

alias:{
  components: path.resolve(__dirname, "src", "components")
}
Run Code Online (Sandbox Code Playgroud)

这样,我就可以通过这种方式在应用程序中导入组件:

import NewsFeed from 'components/NewsFeed'
Run Code Online (Sandbox Code Playgroud)

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

settings: {
    'import/resolver': {
      alias: {
        map: [
          ['components', './src/components']
        ]
      }
    }
Run Code Online (Sandbox Code Playgroud)

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