Этот плагин намеревается поддержать лининг синтаксиса импорта/экспорта ES2015+ (ES6+), а также предотвратить проблемы с неправильным написанием путей файла и импортных имен. Все то, что намерено предоставить синтаксис статического модуля ES2015+, отмеченный в вашем редакторе.
Если вы используете это с Sublime : см. В нижней части важной информации.
Конфигурации включены в.
Конфигурации отключены в.
❗ Установите в конфигурации errors .
☑ Установите в recommended конфигурации.
⌨ Установите в конфигурации typescript .
? Установите в конфигурации warnings .
? Автоматически исправляется с помощью опции CLI --fix .
Вручную исправляется по предложениям редактора.
Устарел.
| Имя | Описание | ? | |||||
|---|---|---|---|---|---|---|---|
| экспорт | Запретите любой недопустимый экспорт, то есть реэкспорт с тем же именем. | ❗ ☑ | |||||
| без депрессии | Запрет импортированные имена, помеченные @deprecated Tag документацией. | ||||||
| Безумно названные блоки | Запретить пустые названные импортные блоки. | ? | |||||
| без экспрессонов-зависимости | Запретить использование посторонних пакетов. | ||||||
| не обдумываемые экспорт | Запрещайте использование изменяемого экспорта с помощью var или let . | ||||||
| Несомненно, как дефект | Запретить использование экспортированного имени в качестве идентификатора экспорта по умолчанию. | ☑? | |||||
| Недометный член | Запрещать использование экспортированного имени в качестве свойства экспорта по умолчанию. | ☑? | |||||
| нельзя не использовать модулы | Запрещайте модули без экспорта или экспорта без сопоставления импорта в другом модуле. |
| Имя | Описание | ? | |||||
|---|---|---|---|---|---|---|---|
| no-amd | Запрещать AMD require и define вызовы. | ||||||
| БЕЗ КОММОНД | Запрещение Commonjs require вызовов и module.exports . Экспорты или exports.* . | ||||||
| no-import-module-exports | Запрещение импортных операторов с помощью модуля CommonJS.exports. | ? | |||||
| no-nodejs-модулы | Запрещение Node.js встроенные модули. | ||||||
| однозначный | Запрет потенциально неоднозначная цель разбора ( script против module ). |
| Имя | Описание | ? | |||||
|---|---|---|---|---|---|---|---|
| по умолчанию | Убедитесь, что экспорт по умолчанию присутствует, учитывая импорт по умолчанию. | ❗ ☑ | |||||
| принудительный узел-протокол-использование | Применение либо используя, либо пропуская node: протокол при импорте Node.js встроенные модули. | ? | |||||
| названный | Убедитесь, что названные импорты соответствуют именованному экспорту в удаленном файле. | ❗ ☑ | ⌨ | ||||
| Пространство имен | Убедитесь, что импортируемые пространства имен содержат исключенные свойства, так как они находятся в восторге. | ❗ ☑ | |||||
| Без приборного пути | Запрет импорт модулей, используя абсолютные пути. | ? | |||||
| без цикла | Запретите модуль импортировать модуль с путем зависимости обратно к себе. | ||||||
| без динамиков | Запретить require() вызовы с выражениями. | ||||||
| НЕТ-ВНЕТРЕЛЬНЫЕ МОДУЛЫ | Запрещать импорту подмодулей других модулей. | ||||||
| Без религиозных пакетов | Запрещать импорту пакетов по относительным путям. | ? | |||||
| Без религиозных импортов | Запрет импорт модулей из родительских каталогов. | ||||||
| без ограниченных путей | Применить, какие файлы могут быть импортированы в данной папке. | ||||||
| Без-самомпорт | Запретите модуль от импорта. | ||||||
| без разрешения | Убедитесь, что импорт указывает на файл/модуль, который может быть разрешен. | ❗ ☑ | |||||
| Невозможные патовые сегменты | Запрещать ненужные сегменты пути в импорте и требуют отчетов. | ? | |||||
| No-Webpack-Loader-Syntax | Запретите синтаксис загрузки WebPack в импорте. |
| Имя | Описание | ? | |||||
|---|---|---|---|---|---|---|---|
| Последовательный тип специфического стиля | Применять или запретить использование встроенных маркеров только для типов для названного импорта. | ? | |||||
| Динамик-импорт-чанхнам | Применить ведущий комментарий с WebPackChunkName для динамического импорта. | ||||||
| экспорт-ласт | Убедитесь, что все экспорты появляются после других заявлений. | ||||||
| расширения | Убедитесь, что последовательное использование расширения файлов в пути импорта. | ||||||
| первый | Убедитесь, что все импорты появляются перед другими заявлениями. | ? | |||||
| Групповые экспорт | Предпочитайте названные экспорты, которые будут сгруппированы в одну экспортную декларацию | ||||||
| Импорт-первый | Заменен на import/first . | ? | |||||
| максимальные зависимости | Обеспечение максимального количества зависимостей, которые может иметь модуль. | ||||||
| Newline-After-Import | Обеспечение новой строки после импортных заявлений. | ? | |||||
| no-anonymous-default-export | Запретите анонимные значения в качестве экспорта по умолчанию. | ||||||
| no-default-export | Запретить экспорт по умолчанию. | ||||||
| без душевных | Запрещать повторный импорт одного и того же модуля в нескольких местах. | ☑? | ? | ||||
| Неснакованный деф | Запрет на именем экспорта по умолчанию. | ||||||
| Неснаковываемый экспорт | Запрещение по имени экспорт. | ||||||
| Без наменного пространства | Запрещение пространства имен (он же «подстановочный знак» * ) импорт. | ? | |||||
| Без непосредственного импорта | Запрет незначенный импорт | ||||||
| заказ | Применять соглашение в заказе на импорт модуля. | ? | |||||
| Prefer-Default-Export | Предпочитаю экспорт по умолчанию, если модуль экспортирует одно имя или несколько имен. |
eslint-plugin-import для предприятияДоступно как часть подписки 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 Если вы используете метод config из typescript-eslint , убедитесь, что 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 позволяет ряд вещей в строках источников импорта модуля, которые не делают узлы, такие как externals ( import 'file!./whatever'
В интересах поддержки обоих из них 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 }
}
}
}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 Config, описанный выше), вы должны указать новые расширения ( .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 Список строк режима, которые, если они соответствуют пути, не будет сообщать о соответствующем модуле, если export не найдено. На практике это означает, что правила, отличные от no-unresolved не будут сообщать о каких-либо import с (абсолютной файловой системы) путей, соответствующих этой шаблоне.
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 , например /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 напрямую с помощью WebPack, например:
// .eslintrc
{
"settings" : {
"import/parsers" : {
"@typescript-eslint/parser" : [ ".ts" , ".tsx" ] ,
} ,
} ,
} В этом случае @typescript-eslint/parser должен быть установлен и необходим в районе работает модуль eslint (то есть установите его в качестве однорангового ESLINT).
В настоящее время это тестируется только с помощью @typescript-eslint/parser (и его предшественника, typescript-eslint-parser ), но теоретически будет работать с любым умеренно смешанным анализатором.
Трудно сказать, насколько хорошо будут поддерживаться различные функции плагина, в зависимости от того, насколько далеко пройдет кроличья дыра. Отправьте проблему, если вы найдете здесь странное поведение, но станьте своим сердцем с вероятным результатом закрытия wontfix .
import/resolverСмотрите резолюры.
import/cache Настройки для поведения кеша. Мемонизация используется на различных уровнях, чтобы избежать обильного количества вызовов fs.statSync /Module Parse, необходимых для правильного сообщения о ошибках.
Для обычной консоли 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 будут рассматриваться как «внешние», включая пакеты в монорепо, такой как Yarn Workspace или Lerna Environment. Если вы хотите пометить эти пакеты как «внутренние», это будет полезно.
Например, если ваши пакеты в MonorePo все в @scope , вы можете настроить import/internal-regex как это
// .eslintrc
{
"settings" : {
"import/internal-regex" : "^@scope/" ,
} ,
}import/node-versionСтрока, которая представляет версию node.js, которую вы используете. Фальшивое значение будет подразумевать версию node.js, с которой вы используете Eslint.
// .eslintrc
{
"settings" : {
"import/node-version" : "22.3.4" ,
} ,
} Sublimelinter-eslint ввел изменение в поддержку файлов .eslintignore Это изменение отправляет относительный путь вместо абсолютного пути к файлу (как обычно предоставляет Eslint), что может сделать невозможным для этого плагина разрешать зависимости от файловой системы.
Этот обходной путь больше не должен быть необходим с выпуском Eslint 2.0, когда .eslintignore будет обновляться, чтобы работать больше как .gitignore , который должен поддерживать правильное игнорирование абсолютных путей через --stdin-filename .
В то же время, см. Roadhump/Sublimelinter-Eslint#58 для получения более подробной информации и обсуждения, но, по сути, вы можете обнаружить, что вам нужно добавить следующую конфигурацию SublimeLinter в ваш Sublime Project File:
{
"folders" :
[
{
"path" : " code "
}
],
"SublimeLinter" :
{
"linters" :
{
"eslint" :
{
"chdir" : " ${project}/code "
}
}
}
} Обратите внимание, что ${project}/code соответствует code предоставленному в folders[0].path .
Цель настройки chdir , в данном случае, состоит в том, чтобы установить рабочий каталог, из которого Eslint выполняется таким же, как и каталог, на котором основывает относительный путь, который он предоставляет.
См. Документы Sublimelinter на chdir для получения дополнительной информации, если это не работает с вашим проектом.
.sublimelinterrc вы не используете .eslintignore
{
"linters" : {
"eslint" : {
"args" : [ " --stdin-filename " , " @ " ]
}
}
} Я также обнаружил, что мне нужно установить rc_search_limit null , который удаляет предел поиска иерархии файлов при поиске дерева каталогов для .sublimelinterrc :
В настройках пакета / Sublimelinter / Пользовательские настройки:
{
"user" : {
"rc_search_limit" : null
}
} Я полагаю, что это по умолчанию 3 , поэтому вам, возможно, не нужно изменять его в зависимости от вашего проекта, максимальная глубина.