Pre-configured rule sets optimized for different environments and use cases, available in both legacy and flat configuration formats.
Traditional ESLint configuration format for ESLint versions prior to v9.
/**
* Legacy configurations object for ESLint < 9
* @type {{ [configName: string]: Linter.LegacyConfig }}
*/
const configs = {
recommended: LegacyConfig,
errors: LegacyConfig,
warnings: LegacyConfig,
"stage-0": LegacyConfig,
react: LegacyConfig,
"react-native": LegacyConfig,
electron: LegacyConfig,
typescript: LegacyConfig
};
interface LegacyConfig {
plugins: string[];
rules: { [ruleName: string]: RuleConfig };
parserOptions?: {
sourceType: "module" | "script";
ecmaVersion: number;
};
extends?: string[];
env?: { [envName: string]: boolean };
settings?: { [settingName: string]: any };
}Modern ESLint configuration format for ESLint v9 and later.
/**
* Flat configurations object for ESLint >= 9
* @type {{ [configName: string]: Linter.FlatConfig }}
*/
const flatConfigs = {
recommended: FlatConfig,
errors: FlatConfig,
warnings: FlatConfig,
react: FlatConfig,
"react-native": FlatConfig,
electron: FlatConfig,
typescript: FlatConfig
// Note: stage-0 config not available in flat format
};
interface FlatConfig {
name: string;
plugins: { [pluginName: string]: any };
rules: { [ruleName: string]: RuleConfig };
languageOptions?: {
sourceType: "module" | "script";
ecmaVersion: number;
parser?: any;
parserOptions?: any;
};
settings?: { [settingName: string]: any };
}Essential rules for import/export validation - the baseline configuration for most projects.
/**
* Recommended configuration with essential import/export rules
*/
// Legacy format
const recommendedLegacy = {
plugins: ["import"],
rules: {
// Static analysis/correctness
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
// Red flags (warnings)
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
}
};
// Flat format
const recommendedFlat = {
name: "import/recommended",
plugins: { import: importPlugin },
rules: {
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn"
},
languageOptions: {
ecmaVersion: 2018,
sourceType: "module"
}
};Usage Examples:
// Legacy ESLint config
module.exports = {
extends: ["plugin:import/recommended"]
};
// Flat ESLint config
import importPlugin from "eslint-plugin-import";
export default [importPlugin.flatConfigs.recommended];Configuration with only error-level rules, focusing on critical import issues.
/**
* Errors-only configuration focusing on critical issues
*/
const errorsConfig = {
// Legacy format
plugins: ["import"],
rules: {
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
}
};Configuration with only warning-level rules for less critical issues.
/**
* Warnings-only configuration for less critical issues
*/
const warningsConfig = {
// Legacy format
plugins: ["import"],
rules: {
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
}
};Experimental "work in progress" rules not yet ready for production use.
/**
* Stage-0 configuration with experimental rules
*/
const stage0Config = {
// Legacy format
plugins: ["import"],
rules: {
"import/no-deprecated": "warn"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
}
};Configuration optimized for React projects with additional React-specific rules.
/**
* React-optimized configuration
*/
const reactConfig = {
// Legacy format
plugins: ["import"],
rules: {
// All recommended rules
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn",
// React-specific additions
"import/no-anonymous-default-export": "error"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018,
ecmaFeatures: {
jsx: true
}
},
env: {
es6: true
}
};Configuration for React Native projects with mobile-specific considerations.
/**
* React Native configuration
*/
const reactNativeConfig = {
// Legacy format
plugins: ["import"],
rules: {
// All React rules
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn",
"import/no-anonymous-default-export": "error",
// React Native specific
"import/no-nodejs-modules": "error"
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018,
ecmaFeatures: {
jsx: true
}
},
env: {
es6: true
}
};Configuration for Electron applications supporting both main and renderer processes.
/**
* Electron configuration for main and renderer processes
*/
const electronConfig = {
// Legacy format
plugins: ["import"],
rules: {
// All recommended rules
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn"
// Note: Node.js modules allowed for main process
// Renderer process may need additional restrictions
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
},
env: {
node: true,
es6: true
}
};Configuration optimized for TypeScript projects with type-aware rules.
/**
* TypeScript-optimized configuration
*/
const typescriptConfig = {
// Legacy format
plugins: ["import"],
rules: {
// All recommended rules
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn",
// TypeScript-specific
"import/consistent-type-specifier-style": ["error", "prefer-inline"]
},
parserOptions: {
sourceType: "module",
ecmaVersion: 2018
},
settings: {
"import/extensions": [".js", ".jsx", ".ts", ".tsx"],
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
typescript: {
alwaysTryTypes: true
}
}
}
};// Legacy ESLint config - single preset
module.exports = {
extends: ["plugin:import/recommended"]
};
// Legacy ESLint config - multiple presets
module.exports = {
extends: [
"plugin:import/recommended",
"plugin:import/typescript"
]
};
// Flat ESLint config - single preset
import importPlugin from "eslint-plugin-import";
export default [
importPlugin.flatConfigs.recommended
];
// Flat ESLint config - multiple presets
export default [
importPlugin.flatConfigs.recommended,
importPlugin.flatConfigs.typescript
];// Legacy config with customizations
module.exports = {
extends: ["plugin:import/recommended"],
rules: {
// Override preset rules
"import/no-unresolved": "warn", // Change from error to warn
"import/order": ["error", { // Add additional rule
"newlines-between": "always"
}]
}
};
// Flat config with customizations
import importPlugin from "eslint-plugin-import";
export default [{
...importPlugin.flatConfigs.recommended,
rules: {
...importPlugin.flatConfigs.recommended.rules,
"import/no-unresolved": "warn",
"import/order": ["error", { "newlines-between": "always" }]
}
}];// Multi-environment project
export default [
// Base config for all files
{
...importPlugin.flatConfigs.recommended,
files: ["src/**/*.{js,ts}"]
},
// Node.js specific (server files)
{
...importPlugin.flatConfigs.recommended,
files: ["server/**/*.js"],
rules: {
...importPlugin.flatConfigs.recommended.rules,
"import/no-nodejs-modules": "off" // Allow Node.js modules
}
},
// React specific (client files)
{
...importPlugin.flatConfigs.react,
files: ["src/components/**/*.{js,jsx,ts,tsx}"]
},
// TypeScript specific
{
...importPlugin.flatConfigs.typescript,
files: ["**/*.{ts,tsx}"]
}
];// Custom configuration extending presets
const customConfig = {
...importPlugin.flatConfigs.recommended,
name: "custom-import-config",
rules: {
...importPlugin.flatConfigs.recommended.rules,
...importPlugin.flatConfigs.typescript.rules,
// Additional custom rules
"import/order": ["error", {
"groups": ["builtin", "external", "internal", "parent", "sibling"],
"newlines-between": "always",
"alphabetize": { "order": "asc" }
}]
}
};
export default [customConfig];