该插件打算支持ES2015+(ES6+)导入/导出语法的覆盖,并防止文件路径和导入名称的拼写问题。 ES2015+静态模块语法的所有优点都打算提供编辑器中标记的。
如果您正在使用Sublime使用此信息:有关重要信息,请参见底部。
启用了配置。
配置禁用。
❗在errors配置中设置。
☑️在recommended配置中设置。
⌨️在typescript配置中设置。
?设置在warnings配置中。
?通过--fix CLI选项自动固定。
由编辑建议手动修复。
弃用。
| 姓名 | 描述 | ? | |||||
|---|---|---|---|---|---|---|---|
| 出口 | 禁止任何无效的出口,即重新出口同名。 | ❗☑️ | |||||
| 没有被剥夺 | 禁止导入的名称标记为@deprecated文档标签。 | ||||||
| 无空的街区 | 禁止空名为导入块。 | ? | |||||
| 无依赖性 | 禁止使用外包包。 | ||||||
| 不可撤离 | 禁止使用可变的出口与var或let 。 | ||||||
| 无名为默认 | 禁止使用导出名称作为默认导出的标识符。 | ☑️? | |||||
| 没有命名为默认会员 | 禁止使用导出名称作为默认导出的属性。 | ☑️? | |||||
| 没有悬挂模型 | 禁止没有导出的模块,或在另一个模块中导入而无需匹配导出。 |
| 姓名 | 描述 | ? | |||||
|---|---|---|---|---|---|---|---|
| 没有amd | 禁止AMD require并define呼叫。 | ||||||
| 无命令 | 禁止concomjs require呼叫和module.exports或exports.* 。 | ||||||
| 无IMPORT模块 | 禁止使用commonjs模块的导入语句。 | ? | |||||
| Noondodejs模型 | 禁止node.js内置模块。 | ||||||
| 明确 | 禁止潜在模棱两可的解析目标( script与module )。 |
| 姓名 | 描述 | ? | |||||
|---|---|---|---|---|---|---|---|
| 默认 | 给定默认导入,请确保存在默认导出。 | ❗☑️ | |||||
| 执行节点求和概述 | 在导入node.js内置模块时使用或省略node:协议。 | ? | |||||
| 命名 | 确保命名导入对应于远程文件中的指定导出。 | ❗☑️ | ⌨️ | ||||
| 名称空间 | 确保导入的命名空间包含重新给出的属性。 | ❗☑️ | |||||
| 无渗透路径 | 禁止使用绝对路径导入模块。 | ? | |||||
| 无周期 | 禁止一个模块导入具有依赖关系路径回到自身的模块。 | ||||||
| 没有动态重复 | 禁止使用表达式require()呼叫。 | ||||||
| 无内部模型 | 禁止进口其他模块的子模块。 | ||||||
| 无核包装 | 禁止通过相对路径导入软件包。 | ? | |||||
| 无宗教派派对 | 禁止从父目录导入模块。 | ||||||
| 无限制的路径 | 强制可以在给定文件夹中导入哪些文件。 | ||||||
| 没有自我象征 | 禁止一个模块导入。 | ||||||
| 尚未解决 | 确保导入指向可以解决的文件/模块。 | ❗☑️ | |||||
| 没有无用的路径 | 禁止进口中不必要的路径段,需要语句。 | ? | |||||
| 没有webpack-loader-syntax | 禁止导入中的WebPack加载程序语法。 |
| 姓名 | 描述 | ? | |||||
|---|---|---|---|---|---|---|---|
| 一致的型特性型 | 强制或禁止使用仅类型的标记来命名导入。 | ? | |||||
| 动态象征 - 名称 | 使用WebPackChunkname执行领先的评论,以进行动态导入。 | ||||||
| 出口持久 | 确保在其他语句之后出现所有出口。 | ||||||
| 扩展 | 确保在导入路径中持续使用文件扩展名。 | ||||||
| 第一的 | 确保所有进口都出现在其他语句之前。 | ? | |||||
| 小组远离 | 优先命名出口是将单个出口声明分组在一起 | ||||||
| 进口第一 | 由import/first取代。 | ? | |||||
| 最大依赖性 | 强制模块可以拥有的最大依赖项数量。 | ||||||
| 纽线 - 象征 | 在导入语句之后执行新线。 | ? | |||||
| 无匿名默认要出口 | 禁止匿名值作为默认导出。 | ||||||
| 无默认要出口 | 禁止默认导出。 | ||||||
| 没有探讨 | 禁止在多个位置重复进口同一模块。 | ☑️? | ? | ||||
| 没有命名默认 | 禁止命名默认导出。 | ||||||
| 没有命名 | 禁止命名出口。 | ||||||
| 无名空间 | 禁止名称空间(又称“通配符” * )导入。 | ? | |||||
| 没有未协调的象征 | 禁止未分配的进口 | ||||||
| 命令 | 在模块导入顺序中执行约定。 | ? | |||||
| 优先默认远端 | 如果模块导出单个名称或多个名称,则希望默认导出。 |
eslint-plugin-import for Enterprise作为Tidelift订阅的一部分可用。
eslint-plugin-import的维护者和其他成千上万的软件包正在与Tidelift合作,为您用于构建应用程序的开源依赖关系提供商业支持和维护。节省时间,降低风险并改善代码健康,同时支付您使用的确切依赖项的维护者。了解更多。
# inside your project's working tree
npm install eslint-plugin-import --save-dev.eslintrc )默认情况下,所有规则都不在。但是,您可以扩展预设配置之一,或者在.eslintrc.(yml|json|js)中手动配置它们。
{
"extends" : [
"eslint:recommended" ,
"plugin:import/recommended" ,
] ,
} {
"rules" : {
"import/no-unresolved" : [ "error" , { "commonjs" : true , "amd" : true } ] ,
"import/named" : "error" ,
"import/namespace" : "error" ,
"import/default" : "error" ,
"import/export" : "error" ,
// etc...
} ,
} ,eslint.config.js )默认情况下,所有规则都不在。但是,您可以在eslint.config.(js|cjs|mjs)中手动配置它们,或扩展预设配置之一:
import importPlugin from 'eslint-plugin-import' ;
import js from '@eslint/js' ;
export default [
js . configs . recommended ,
importPlugin . flatConfigs . recommended ,
{
files : [ '**/*.{js,mjs,cjs}' ] ,
languageOptions : {
ecmaVersion : 'latest' ,
sourceType : 'module' ,
} ,
rules : {
'no-unused-vars' : 'off' ,
'import/no-dynamic-require' : 'warn' ,
'import/no-nodejs-modules' : 'warn' ,
} ,
} ,
] ; 您可以使用以下片段或使用下面描述的粒状设置组装自己的配置。
确保已在以下配置中使用@typescript-eslint/parser和eslint-import-resolver-typescript 。
{
"extends" : [
"eslint:recommended" ,
"plugin:import/recommended" ,
// the following lines do the trick
"plugin:import/typescript" ,
] ,
"settings" : {
"import/resolver" : {
// You will also need to install and configure the TypeScript resolver
// See also https://github.com/import-js/eslint-import-resolver-typescript#configuration
"typescript" : true ,
"node" : true ,
} ,
} ,
}config()在typescript-eslint中如果您正在使用typescript-eslint中的config方法,请确保flatConfig包含在extends名数组中。
import tseslint from 'typescript-eslint' ;
import importPlugin from 'eslint-plugin-import' ;
import js from '@eslint/js' ;
export default tseslint . config (
js . configs . recommended ,
// other configs...
{
files : [ '**/*.{ts,tsx}' ] ,
extends : [ importPlugin . flatConfigs . recommended ] ,
// other configs...
}
) ; 随着模块捆绑器的出现以及模块和模块语法规格的当前状态, import x from 'module'地方并不总是很明显,应该从“模块”中寻找module后面的文件。
在通过v0.10ish的情况下,该插件直接使用了替代的resolve插件,该插件实现了Node的导入行为。在大多数情况下,这效果很好。
但是,WebPack允许在导入模块源字符串中进行许多内容,例如加载程序( import 'file!./whatever' )和许多混叠程序,例如externals :将模块ID映射到运行时的全局名称(允许通过脚本标签更包含一些模块))。
为了支持这两种情况,v0.11引入了解析器。
目前已经实施了节点和WebPack分辨率,但是解析器只是NPM软件包,因此支持第三方软件包(并鼓励!)。
您可以通过多种方式参考解析器(按优先顺序):
eslint-import-resolver名称,例如eslint-import-resolver-foo : // .eslintrc
{
"settings" : {
// uses 'eslint-import-resolver-foo':
"import/resolver" : "foo" ,
} ,
} # .eslintrc.yml
settings :
# uses 'eslint-import-resolver-foo':
import/resolver : foo // .eslintrc.js
module . exports = {
settings : {
'import/resolver' : {
foo : { someConfig : value }
}
}
}my-awesome-npm-module : // .eslintrc
{
"settings" : {
"import/resolver" : "my-awesome-npm-module" ,
} ,
} # .eslintrc.yml
settings :
import/resolver : ' my-awesome-npm-module ' // .eslintrc.js
module . exports = {
settings : {
'import/resolver' : {
'my-awesome-npm-module' : { someConfig : value }
}
}
}computed property名称: // .eslintrc.js
module . exports = {
settings : {
'import/resolver' : {
[ path . resolve ( '../../../my-resolver' ) ] : { someConfig : value }
}
}
}相对路径将相对于源的最近package.json解决。JSON或该过程的当前工作目录,如果找不到package.json 。
如果您在编写解析器方面很有趣,请参阅规格以获取更多详细信息。
您可以在.eslintrc中设置以下设置:
import/extensions文件扩展名列表将被解析为模块并检查export s。
除非您使用react共享配置,否则默认为['.js'] ,在这种情况下,它被指定为['.js', '.jsx'] 。尽管默认,但是如果您使用的是typescript(没有plugin:import/typescript配置上述),则必须指定新的扩展名( .ts ,以及.tsx如果使用react)。
"settings" : {
"import/extensions" : [
".js" ,
".jsx"
]
}如果您需要更多的颗粒扩展定义,则可以使用:
"settings" : {
"import/resolver" : {
"node" : {
"extensions" : [
".js" ,
".jsx"
]
}
}
}请注意,这与可能包括.json , .coffee等的任何import/resolver扩展设置不同(并且可能是一个子集),这仍然会导致no-unresolved规则。
同样,以下import/ignore模式将覆盖此列表。
import/ignore如果未找到export s,则将与路径匹配的正则列表将不会报告匹配模块。实际上,这意味着除no-unresolved规则外,其他规则不会在与此模式相匹配的(绝对文件系统)路径的任何import s上报告。
no-unresolved的ignore设置。
{
"settings" : {
"import/ignore" : [
".coffee$" , // fraught with parse errors
".(scss|less|css)$" , // can't parse unprocessed CSS modules, either
] ,
} ,
}import/core-modules一系列需要将其视为“核心”模块的其他模块 - 应该认为解决的模块,但在文件系统上没有路径。您的解析器可能已经定义了其中的一些(例如,节点解析器知道fs和path ),因此您无需重新定义它们。
例如,电子公开electron模块:
import 'electron' // without extra config, will be flagged as unresolved!否则这将无法解决。为了避免这种情况,您可以提供electron作为核心模块:
// .eslintrc
{
"settings" : {
"import/core-modules" : [ "electron" ] ,
} ,
}在电子的特定情况下,有一个共享的配置名为electron ,为您指定了这一点。
欢迎更多此类共享配置为其他平台的贡献!
import/external-module-folders一个文件夹。仅从这些文件夹中解析的模块将被视为“外部”。默认情况下 - ["node_modules"] 。如果您配置了路径或WebPack以不同的方式处理内部路径,并且想考虑一些文件夹中的模块,例如bower_components或jspm_modules ,则是有道理的。
此选项在MonorePo设置中也很有用:列表此处所有包含MonorePo软件包的目录,无论使用哪种解析器,它们都将被视为外部。
如果您使用yarn PNP作为软件包管理器,请添加.yarn文件夹,所有安装的依赖项将被视为external ,而不是internal 。
此数组中的每个项目都是文件夹的名称,其子路口或其绝对前缀路径:
jspm_modules将匹配名为jspm_modules的任何文件或文件夹,或具有名为jspm_modules的直接或非直接父级,EG /home/me/project/jspm_modules /home/me/project/jspm_modules/some-pkg/index.js
packages/core将匹配包含这两个段的任何路径,例如/home/me/project/packages/core/src/utils.js 。
/home/me/project/packages只能匹配此目录中的文件和目录,以及目录本身。
请注意,此处不允许使用不完整的名称,因此components与bower_components和packages/ui不匹配packages/ui-utils (但是匹配packages/ui/utils )。
import/parsers从解析器到文件扩展名数组的地图。如果匹配文件扩展名,则依赖关系解析器将需要并使用映射密钥作为解析器,而不是配置的ESLINT解析器。如果您使用WebPack直接与Typescript进行了互互互互相关,例如:
// .eslintrc
{
"settings" : {
"import/parsers" : {
"@typescript-eslint/parser" : [ ".ts" , ".tsx" ] ,
} ,
} ,
}在这种情况下,必须在运行的eslint模块的位置安装@typescript-eslint/parser并需要(即,将其作为ESLINT的peer安装)。
目前仅使用@typescript-eslint/parser (及其前身typescript-eslint-parser )对此进行测试,但理论上应与任何中等符合Estree的解析器一起使用。
很难说出各种插件功能的支持,具体取决于兔子孔的距离多远。如果您在这里发现奇怪的行为,请提交问题,但要与wontfix结束的可能结果有关。
import/resolver请参阅解析器。
import/cache缓存行为的设置。在各个级别使用纪念活动,以避免使用正确报告错误所需的大量fs.statSync /模块解析。
对于正常的eslint控制台运行,高速缓存寿命是无关紧要的,因为我们可以强烈认为文件在Linter过程的寿命中不应更改(因此,内存中的缓存)
但是,对于持久的过程,例如eslint_d或eslint-loader ,重要的是要有一些陈旧的概念。
如果您从不使用eslint_d或eslint-loader ,则可以将缓存寿命设置为Infinity ,并且一切都可以:
// .eslintrc
{
"settings" : {
"import/cache" : {
"lifetime" : "∞" , // or Infinity, in a JS config
} ,
} ,
}否则,设置一些整数和缓存条目将在许多秒之后被驱逐:
// .eslintrc
{
"settings" : {
"import/cache" : {
"lifetime" : 5 , // 30 is the default
} ,
} ,
}import/internal-regex包裹的正则应视为内部。当您使用MonorePo设置或开发一组彼此依赖的软件包时,很有用。
默认情况下,从import/external-module-folders引用的任何软件包都将被视为“外部”,包括纱线工作区或LERNA环境等MonorePo中的软件包。如果您想将这些软件包标记为“内部”,则将很有用。
例如,如果您的软件包在monorepo中都在@scope中,则可以配置import/internal-regex
// .eslintrc
{
"settings" : {
"import/internal-regex" : "^@scope/" ,
} ,
}import/node-version表示您正在使用的node.js版本的字符串。虚假的值将暗示您正在运行Eslint的Node.js版本。
// .eslintrc
{
"settings" : {
"import/node-version" : "22.3.4" ,
} ,
} sublimelinter-eslint引入了一个更改,以更改支持.eslintignore文件,该文件在编辑过程中更改了文件路径的方式将文件路径传递给ESLINT。此更改发送了一个相对路径,而不是通往文件的绝对路径(如通常提供的ESLINT),这可能使该插件无法解决对文件系统的依赖关系。
在发布ESLINT 2.0时,不再需要此解决方法,当.eslintignore将更新以更像.gitignore工作方式,该工作应该通过--stdin-filename来支持适当地忽略绝对路径。
同时,有关更多详细信息和讨论,请参见Roadhump/Sublimelinter-Eslint#58,但从本质上讲,您可能会发现您需要将以下SublimeLinter配置添加到Sublime Project文件中:
{
"folders" :
[
{
"path" : " code "
}
],
"SublimeLinter" :
{
"linters" :
{
"eslint" :
{
"chdir" : " ${project}/code "
}
}
}
}请注意, ${project}/code与folders[0].path提供的code匹配。
在这种情况下, chdir设置的目的是设置执行ESLINT的工作目录与Sublimelinter-Eslint基础所提供的相对路径的目录相同。
有关更多信息,请参见chdir上的Sublimelinter文档,以防您的项目不起作用。
如果您不使用.eslintignore ,或者没有崇高的项目文件,也可以通过代码的某些祖先目录中的.sublimelinterrc文件进行以下操作:
{
"linters" : {
"eslint" : {
"args" : [ " --stdin-filename " , " @ " ]
}
}
}我还发现我需要将rc_search_limit设置为null ,该null在查找.sublimelinterrc的目录树时删除了文件层次结构搜索限制:
在软件包设置 / sublimelinter /用户设置中:
{
"user" : {
"rc_search_limit" : null
}
}我相信这默认为3 ,因此您可能不需要根据项目文件夹最大深度更改它。