ESLint:如何使用“no-restricted-imports”限制某些路径但允许子路径?

Posted

技术标签:

【中文标题】ESLint:如何使用“no-restricted-imports”限制某些路径但允许子路径?【英文标题】:ESLint: How can I restrict certain paths with "no-restricted-imports" but allow subpaths? 【发布时间】:2021-02-09 19:52:35 【问题描述】:

我正在使用 Material-UI,我正在切换我的所有导入

import  Button  from "@material-ui/core";

import Button from "@material-ui/core/Button";

我想添加一个 lint 规则,不允许从“@material-ui/core”直接导入,但允许任何子文件夹,例如“@material-ui/core/Button”。

我发现了一个“no-restricted-imports”规则应该可以解决它,但我只能限制“@material-ui/core”下的任何东西,所以“@material-ui/core/*”会受到限制也是。

我尝试了几种设置规则的方法,但对于我的用例来说,所有这些方法都失败了。即:

"no-restricted-imports": ["error", "@material-ui/core"]
///////
"no-restricted-imports": ["error", 
    "patterns": ["@material-ui/core"]
]

但两者都行不通。我错过了什么还是无法实现?

【问题讨论】:

【参考方案1】:

我想用 lodash 做同样的事情。

对于 Treeshaking,我想限制

从“lodash”导入 get;

但允许

从 'lodash/get' 导入获取;

为此配置eslint,

'no-restricted-imports': [
      'error',
      
        paths: [
          
            name: 'lodash',
            message:
              "Please use `import [package] from 'lodash/[package]'` instead."
          
        ],
        patterns: ['!lodash/*']
      
    ]

您可以为您的包裹尝试类似的方法。

【讨论】:

【参考方案2】:

您可以对某些文件路径使用覆盖

"no-restricted-imports": ["error", "@material-ui/core"],
"overrides": [
  "files": [...],
  "rules: 
    "no-restricted-imports": ["error", 
      "patterns": ["@material-ui/core"]
    ]
  ,
],

【讨论】:

以上是关于ESLint:如何使用“no-restricted-imports”限制某些路径但允许子路径?的主要内容,如果未能解决你的问题,请参考以下文章

你如何配置和使用 gulp eslint 任务?

我是如何在公司项目中使用ESLint来提升代码质量的

如何将 typescript-eslint 规则添加到 eslint

在项目中如何使用ESLint提高代码质量

使用 eslint 时如何禁用 no-plusplus?

如何使用 nodejs express 应用程序配置 eslint