埃斯林特-插头-进口
此插件旨在支持 ES2015+(ES6+) 导入/导出语法的林入,并预防文件路径和导入名称的误写出问题. ES2015+静态模块语法打算提供的所有善良,标记在你的编辑器上.
如果你用这个与苏布里米: 见 下一节 对于重要的信息.
规则
QQ 配置启用 .
QQ 配置设置为警告 .
QQ 配置已禁用 .
设置在 errors 配置 .
设置在 recommended 配置 .
设置在 typescript 配置 .
设置在 warnings 配置 .
自动修复 --fix CLI 选项。 。 。 .
手动修复 编辑器建议。 。 。 .
❌被贬.
帮助警告
| 名称 | 说明 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
|---|---|---|---|---|---|---|---|
| 导出 | 禁止任何无效的出口,即同名再出口. | ❗ | |||||
| 无折旧 | 使用标记的被禁入名称 @deprecated 文档标记. | ||||||
| 无空名块 | 禁用已命名的空导入块 . | 🔧 | 💡 | ||||
| 无亲属关系 | 禁止使用外相包. | ||||||
| 不可移动出口 | 禁止使用可变出口 var 或者说 let。 。 。 . | ||||||
| 无默认名称 | 禁止使用导出名称作为默认导出标识符 . | ☑️ | |||||
| 无默认成员 | 禁止使用导出名称作为默认导出属性 . | ☑️ | |||||
| 无未使用模块 | 不输出的禁用模块,或不匹配另一个模块中的导入的输出. |
模块系统
| 名称 | 说明 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
|---|---|---|---|---|---|---|---|
| 无 | 无效 AMD require 财务报告和审定财务报表 define 打电话. | ||||||
| 无常识 | 禁止常见JS require 电话和 module.exports 或者说 exports.*。 。 。 . | ||||||
| 无进口模块出口 | 带有 commonJS 模块.exports 的禁止导入语句. | 🔧 | |||||
| 无节点模块 | Forbid Node.js 内建模块. | ||||||
| 毫不含糊 | 无效可能含糊不清的目标script 文选. module) (中文(简体) ). |
静态分析
| 名称 | 说明 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
|---|---|---|---|---|---|---|---|
| 默认 | 确保默认导出存在, 因为默认导入 . | ❗ | |||||
| 名称 | 确保命名的导入符合远程文件中的命名导出 . | ❗ | ⌨️ | ||||
| 命名空间 | 确保导入的命名空间含有被引用的属性 . | ❗ | |||||
| 无绝对的路径 | 使用绝对路径强制导入模块 . | 🔧 | |||||
| 无循环 | 从导入带有依赖路径的模块返回到自身, 禁止模块 . | ||||||
| 无动力要求 | 无效 require() 以表达方式打电话. | ||||||
| 无内部模块 | 强制导入其他模块的子模块 . | ||||||
| 无关系包 | 禁止通过相对路径导入软件包 . | 🔧 | |||||
| 无亲属父母进口 | 从父目录中导入禁用模块 . | ||||||
| 无限制路径 | 强制在指定的文件夹中导入哪些文件 . | ||||||
| 无自输入 | 从导入中禁用模块 . | ||||||
| 无未解决 | 确保导入指向能够解决的文件/模块 . | ❗ | |||||
| 无用- 路径- 部分 | 导入中禁止不必要的路径段并需要语句 . | 🔧 | |||||
| 无网包装填器语法 | 进口时的frobid网络包装加载器语法. |
样式指南
| 名称 | 说明 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
|---|---|---|---|---|---|---|---|
| 一致类型-规格-样式 | 强制或禁止使用指定进口的内含型号标识. | 🔧 | |||||
| 动态导入通称 | 用 WebpackChunkName 执行一个主要注释用于动态导入 . | 💡 | |||||
| 最后出口额 | 确保所有出口都出现在其他声明之后. | ||||||
| 扩展 | 确保在导入路径内一致使用文件扩展名 . | ||||||
| 第一个 | 确保所有进口物品都出现在其他报表之前. | 🔧 | |||||
| 集团出口 | 更倾向于在单一出口申报中将指定出口归类 | ||||||
| 进口-第一次 | 改为: import/first。 。 。 . | 🔧 | ❌ | ||||
| 最大依赖性 | 执行模块的最大依赖数量. | ||||||
| 新线后导入 | 导入语句后执行新行 . | 🔧 | |||||
| 无匿名- 默认- 导出 | 禁止匿名值作为默认导出 . | ||||||
| 无默认导出 | 强制默认出口 . | ||||||
| 无重复 | 在多处禁止重复导入同一模块. | ☑️ | 🔧 | ||||
| 无名- 默认 | 禁止指定默认输出 . | ||||||
| 无名出口 | 禁止命名出口. | ||||||
| 无名称空间 | 无效命名空间( a. k. a. "wildcard") *进口. | 🔧 | |||||
| 无未签名进口 | 禁止未指定进口 | ||||||
| 顺序 | 以模块导入顺序执行公约. | 🔧 | |||||
| 偏好默认-导出 | 如果模块导出一个单一名称或多个名称,则倾向于默认导出 . |
eslint-plugin-import 企业
作为Tidelift订阅的一部分提供.
维护者 eslint-plugin-import 和上千个其他的软件包 正在和Tidelift合作 提供商业支持和维护 你用来构建应用程序的开源依赖。 节省时间,降低风险,改善代码健康,同时向维护者支付使用的确切依赖性. 学多取.
安装
# inside your project's working tree
npm install eslint-plugin-import --save-dev
配置 - 遗产( E).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...
},
},
配置 - 平面( E)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,
},
},
}
解析器
随着模块捆绑器的出现以及模块和模块的现状
语法规格, 并不总是很明显的 import x from 'module' 应该看
查找后面的文件 module。 。 。 .
通过 v0. 10ish , 此插件直接使用了子存储器 resolve 插头,
它执行节点的导入行为。 这在多数情况下都相当有效.
然而, Webpack 允许导入模块源字符串中的一些事项
节点没有,例如加载器(import 'file!./whatever')和若干项
替代计划,例如: externals: 将模块 id 映射到全局名称
运行时间( 允许一些模块通过脚本标记更传统的包含) .
为了支持这两起事件,v0.11引入了解决者.
现 节点 财务报告和审定财务报表 网络软件包 决议已得到执行,但 解析器只是 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 }
}
}
}
- 带有完整的 npm 模块名称, 如
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 或者说
进程当前工作目录( 如果没有) package.json 已找到.
如果你在写解题时感兴趣,请看 光谱 更多细节.
设置
您可以在您的 .eslintrc数字 :
import/extensions
将解析为模块并检查的文件扩展名列表
export编号.
此默认为 ['.js'],除非您正在使用 react 共享配置,
此处指明为 ['.js', '.jsx']尽管默认,
如果您正在使用 TypeScript (没有 plugin:import/typescript 配置
)您必须指定新的扩展(.ts,还有 .tsx
如果使用React).
"settings": {
"import/extensions": [
".js",
".jsx"
]
}
如果需要更多的颗粒扩展定义,可以使用:
"settings": {
"import/resolver": {
"node": {
"extensions": [
".js",
".jsx"
]
}
}
}
请注意,这不同于(并可能是一个子集)任何 import/resolver
扩展设置,其中可包括 .json, (中文(简体) ), .coffee等,将仍然
输入 no-unresolved 规则.
此外 import/ignore 模式将推翻此列表.
import/ignore
Regex 字符串列表, 如果匹配到路径, 将会
如果没有,则不报告匹配模块 export已找到 s.
在实践中,这意味着除下列规则以外的规则: no-unresolved 将不报告任何
imports 带有符合此模式的(绝对文件系统)路径.
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暴露了一种 electron 模块 :
import 'electron' // without extra config, will be flagged as unresolved!
否则将无法解决。 为了避免这种情况,你可以提供 electron 作为
核心模块 :
// .eslintrc
{
"settings": {
"import/core-modules": ["electron"],
},
}
在Electron的具体案例中,有一个共同的配置命名 electron
指定这个给你.
欢迎更多此类共享配置为其他平台做出贡献!
import/external-module-folders
一系列文件夹 。 仅从这些文件夹中解析出来的模块将被视为"外部". 默认 ["node_modules"]。如果您已经配置了路径或网络软件包来以不同方式处理您的内部路径,并且想要考虑一些文件夹中的模块,例如 bower_components 或者说 jspm_modules,作为"外部".
此选项在 monrepo 设置中也是有用的 : 在此列出所有包含 monrepo 软件包的目录, 无论使用哪一个解析器, 它们都会被当作外部目录 .
使用时 yarn PnP 作为您的软件包管理器, 添加 .yarn 文件夹和您已安装的所有依赖关系将被视为 external,改为 internal。 。 。 .
此数组中的每个项目要么是一个文件夹的名称、它的子路径,要么是它的绝对前缀路径:
-
jspm_modules将匹配任何命名的文件或文件夹jspm_modules或具有直接或非直接父母名称的jspm_modules,比如说./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 解析器 。 如果您与 TypeScript 进行对接, 此操作将有所帮助 直接使用网包,例如:
// .eslintrc
{
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"],
},
},
}
在这种情况下, @typescript-eslint/parser
运行时必须安装和需要 eslint 模块的位置
(即作为ESLint的对等设备安装).
目前仅测试 @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
包件的正则ex应作为内部处理. 当您正在使用单列集设置或开发一套互相依赖的软件包时有用 .
默认情况下,任意引用的软件包 import/external-module-folders 将被视为“外部”,包括像纱线工作空间或lerna环境这样的单列波中的包。 如果您想要将这些软件包标为“ 内部 ” , 这将很有用 .
例如,如果您在单列的软件包全部在 @scope,您可以配置 import/internal-regex 像这样
// .eslintrc
{
"settings": {
"import/internal-regex": "^@scope/",
},
}
下层内衬
SublimeLinter-slint 引入了支持的更改 .eslintignore 文件
它改变了文件路径在编辑时向 ESLint 传递的方式.
此更改向文件发送相对路径而不是绝对路径( 如 ESLint)
)),这会使此插件无法解决依赖性
在文件系统.
随着ESLint 2.0的发布,这一绕行就不再需要了
.eslintignore 将更新到更像一个 .gitignore,应当
支持正确忽略绝对路径通过 --stdin-filename。 。 。 .
在此期间,看 roadhump/SublimeLinter-slint#58 (英语)
更多细节和讨论,但基本上你可能会发现你需要添加以下内容:
SublimeLinter 配置到您的 Sublime 工程文件 :
{
"folders":
[
{
"path": "code"
}
],
"SublimeLinter":
{
"linters":
{
"eslint":
{
"chdir": "${project}/code"
}
}
}
}
请注意: ${project}/code 与 code 规定 folders[0].path。 。 。 .
目的 chdir 在此情况下,设置是设置工作目录
从中执行 ESLint 与 SublimeLinter- eslint 的目录相同
以它提供的相对路径为基础.
见 SublimeLinter 文档 chdir
需要更多信息,请查看infofinland上的项目.
如果你没有使用 .eslintignore,或者没有Sublime项目文件,您也可以
通过 .sublimelinterrc 您的祖先目录中的文件
代码 :
{
"linters": {
"eslint": {
"args": ["--stdin-filename", "@"]
}
}
}
我也发现我需要设置 rc_search_limit 改为 null,删除文件
查找目录树时等级搜索限制 .sublimelinterrc数字 :
在软件包设置/ sublimeLinter/ 用户设置中:
{
"user": {
"rc_search_limit": null
}
}
我相信这个默认 3,所以你可能不需要 改变它取决于你的
项目文件夹最大深度 .