Imports & Exports Rules

Import/export formatting, absolute paths, index file conventions, and module exports

8 rules6 auto-isFixable6 isConfigurable

absolute-imports-only

auto-isFixableisConfigurable

Use alias imports from index files, no relative imports across folders

Why: Absolute imports are cleaner than ../../../components

Options

OptionTypeDefaultDescription
aliasPrefixstring"@/"Path alias prefix
extraAllowedFoldersstring[][]Additional importable folders
eslint.config.js
javascript
"code-style/absolute-imports-only": ["error", { aliasPrefix: "@/", extraAllowedFolders: [] }]
Correct
javascript
import { Button, Input } from "@/components";import { useAuth } from "@/hooks";
Incorrect
javascript
import { Button } from "../../components";import { useAuth } from "../../../hooks";
eslint.config.js
javascript
"code-style/absolute-imports-only": "error"

export-format

auto-isFixableisConfigurable

Collapse short exports to one line; expand larger ones

Why: Consistent export formatting improves readability

Options

OptionTypeDefaultDescription
maxSpecifiersinteger3Maximum specifiers on single line
eslint.config.js
javascript
"code-style/export-format": ["error", { maxSpecifiers: 3 }]
Correct
javascript
export { Button, Input, Select }; export {    Button,    Input,    Select,    Checkbox,};
Incorrect
javascript
export { Button, Input, Select, Checkbox, Radio };
eslint.config.js
javascript
"code-style/export-format": "error"

import-format

auto-isFixableisConfigurable

Collapse short imports to one line; expand larger ones

Why: Consistent import formatting makes diffs cleaner

Options

OptionTypeDefaultDescription
maxSpecifiersinteger3Maximum specifiers on single line
eslint.config.js
javascript
"code-style/import-format": ["error", { maxSpecifiers: 3 }]
Correct
javascript
import { useState } from "react"; import {    useState,    useEffect,    useCallback,    useMemo,} from "react";
Incorrect
javascript
import { useState, useEffect, useCallback, useMemo, useRef } from "react";
eslint.config.js
javascript
"code-style/import-format": "error"

import-source-spacing

auto-isFixable

No leading/trailing spaces inside import path strings

Why: Spaces in module paths are almost always typos
Correct
javascript
import { Button } from "@mui/material";
Incorrect
javascript
import { Button } from " @mui/material";
eslint.config.js
javascript
"code-style/import-source-spacing": "error"

index-export-style

auto-isFixableisConfigurable

Index files: compact re-exports; regular files: blank lines between exports

Why: Index files are aggregators and should be compact

Options

OptionTypeDefaultDescription
stylestring"shorthand"Export style: "shorthand" or "import-export"
eslint.config.js
javascript
"code-style/index-export-style": ["error", { style: "shorthand" }]
Correct
javascript
// index.jsexport { Button } from "./button";export { Input } from "./form";
Incorrect
javascript
// index.jsexport { Button } from "./button"; export { Input } from "./form";
eslint.config.js
javascript
"code-style/index-export-style": "error"

index-exports-only

report only

Index files should only contain imports and re-exports, not code definitions

Why: Index files should be barrels that aggregate exports
Correct
javascript
export { Button } from "./Button";export { helper } from "./utils";
Incorrect
javascript
export const CONSTANT = "value";export function helper() {}
eslint.config.js
javascript
"code-style/index-exports-only": "error"

inline-export-declaration

auto-isFixableisConfigurable

Enforce inline export declarations instead of grouped export statements

Why: Inline exports make it clear which declarations are public

Options

OptionTypeDefaultDescription
allowGroupedbooleanfalseAllow grouped exports
eslint.config.js
javascript
"code-style/inline-export-declaration": ["error", { allowGrouped: false }]
Correct
javascript
export const API_URL = "/api"; export const MAX_RETRIES = 3;
Incorrect
javascript
const API_URL = "/api";const MAX_RETRIES = 3; export { API_URL, MAX_RETRIES };
eslint.config.js
javascript
"code-style/inline-export-declaration": "error"

module-index-exports

isConfigurablereport only

Index files must export all folder contents

Why: Ensures proper module boundaries and folder-level imports

Options

OptionTypeDefaultDescription
extraModuleFoldersstring[][]Additional module folders to check
extraIgnorePatternsstring[][]Additional file patterns to skip
eslint.config.js
javascript
"code-style/module-index-exports": ["error", { extraModuleFolders: [], extraIgnorePatterns: [] }]
Correct
javascript
// components/index.jsexport { Button } from "./Button";export { Input } from "./Input";
Incorrect
javascript
// components/index.js (missing Input export)export { Button } from "./Button";
eslint.config.js
javascript
"code-style/module-index-exports": "error"