ESLint plugin that enforces ES2015+ import/export syntax rules and prevents common issues with module imports.
npx @tessl/cli install tessl/npm-eslint-plugin-import@2.32.0ESLint Plugin Import provides comprehensive linting rules for ES2015+ (ES6+) import/export syntax. It helps prevent issues with misspelling of file paths and import names, enforces proper module resolution, detects circular dependencies, and maintains consistent import ordering and formatting. The plugin offers static analysis capabilities to validate import statements and supports maximum compatibility across different JavaScript environments and build tools.
npm install eslint-plugin-import --save-dev// For ESLint flat config (ESLint 9+)
import importPlugin from "eslint-plugin-import";
// For legacy ESLint config
module.exports = {
plugins: ["import"],
extends: ["plugin:import/recommended"]
};import importPlugin from "eslint-plugin-import";
export default [
{
name: "import/recommended",
plugins: { import: importPlugin },
rules: {
...importPlugin.flatConfigs.recommended.rules,
},
languageOptions: {
ecmaVersion: 2018,
sourceType: "module",
},
},
];module.exports = {
plugins: ["import"],
extends: ["plugin:import/recommended"],
rules: {
"import/no-unresolved": "error",
"import/no-duplicates": "warn",
"import/order": ["error", {
"groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
"newlines-between": "always"
}]
}
};ESLint Plugin Import is structured around several key components:
Core plugin structure and metadata for ESLint integration.
interface ImportPlugin {
meta: {
name: string;
version: string;
};
rules: { [ruleName: string]: Rule.RuleModule };
configs: { [configName: string]: Linter.LegacyConfig };
flatConfigs: { [configName: string]: Linter.FlatConfig };
}Collection of 46 ESLint rules organized by functionality for comprehensive import/export validation.
interface RuleModule {
meta: {
type: "problem" | "suggestion" | "layout";
docs: {
category: string;
description: string;
url: string;
};
schema: Array<any>;
fixable?: "code" | "whitespace";
};
create(context: Rule.RuleContext): Rule.RuleListener;
}Rule Categories:
Pre-configured rule sets optimized for different environments and use cases.
interface LegacyConfig {
plugins: string[];
rules: { [ruleName: string]: string | [string, ...any[]] };
parserOptions?: {
sourceType: "module" | "script";
ecmaVersion: number;
};
}
interface FlatConfig {
name: string;
plugins: { import: ImportPlugin };
rules: { [ruleName: string]: string | [string, ...any[]] };
languageOptions?: {
sourceType: "module" | "script";
ecmaVersion: number;
};
}Available Configurations:
recommended: Essential rules for import/export validationerrors: Error-level rules onlywarnings: Warning-level rules onlyreact: React-specific optimizationsreact-native: React Native environmentelectron: Electron application supporttypescript: TypeScript project optimizationsLegacy-only configurations (not available in flat configs):
stage-0: Experimental rules// Core plugin interface
interface ImportPlugin {
meta: {
name: string;
version: string;
};
rules: { [ruleName: string]: Rule.RuleModule };
configs: { [configName: string]: Linter.LegacyConfig };
flatConfigs: { [configName: string]: Linter.FlatConfig };
}
// Rule severity levels
type RuleSeverity = "off" | "warn" | "error" | 0 | 1 | 2;
// Rule configuration
type RuleConfig = RuleSeverity | [RuleSeverity, ...any[]];
// Configuration objects
interface LegacyConfig {
plugins?: string[];
extends?: string[];
rules?: { [ruleName: string]: RuleConfig };
parserOptions?: {
sourceType?: "module" | "script";
ecmaVersion?: number;
};
}
interface FlatConfig {
name?: string;
plugins?: { [name: string]: any };
rules?: { [ruleName: string]: RuleConfig };
languageOptions?: {
sourceType?: "module" | "script";
ecmaVersion?: number;
};
}