Imports & Exports Rules
Import/export formatting, absolute paths, index file conventions, and module exports
8 rules6 auto-isFixable6 isConfigurable
On This Page
absolute-imports-only
auto-isFixableisConfigurable
Use alias imports from index files, no relative imports across folders
Why: Absolute imports are cleaner than ../../../components
Options
| Option | Type | Default | Description |
|---|---|---|---|
aliasPrefix | string | "@/" | Path alias prefix |
extraAllowedFolders | string[] | [] | 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
| Option | Type | Default | Description |
|---|---|---|---|
maxSpecifiers | integer | 3 | Maximum 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
| Option | Type | Default | Description |
|---|---|---|---|
maxSpecifiers | integer | 3 | Maximum 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
| Option | Type | Default | Description |
|---|---|---|---|
style | string | "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
| Option | Type | Default | Description |
|---|---|---|---|
allowGrouped | boolean | false | Allow 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
| Option | Type | Default | Description |
|---|---|---|---|
extraModuleFolders | string[] | [] | Additional module folders to check |
extraIgnorePatterns | string[] | [] | 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"