Skip to content

Enforce the style of file extensions in import declarations (n/file-extension-in-import) ​

🔧 This rule is automatically fixable by the --fix CLI option.

We can omit file extensions in import/export declarations.

js
import foo from "./path/to/a/file" // maybe it's resolved to 'file.js' or 'file.json'
export * from "./path/to/a/file"

We can also import a variety of file types with bundlers such as Webpack. In this situation, explicit file extensions can help to identify the type of file being imported.

📖 Rule Details ​

This rule enforces the style of file extensions in import/export declarations.

Options ​

This rule has a string option and an object option.

json
{
    "n/file-extension-in-import": [
        "error",
        "always" or "never",
        {
            ".xxx": "always" or "never",
        }
    ]
}
  • "always" (default) requires file extensions in import/export declarations.
  • "never" disallows file extensions in import/export declarations.
  • .xxx is the overriding setting for specific file extensions. You can use arbitrary property names which start with ..

always ​

Examples of 👎 incorrect code for the "always" option:

js
/*eslint n/file-extension-in-import: ["error", "always"]*/

import foo from "./path/to/a/file"

Examples of 👍 correct code for the "always" option:

js
/*eslint n/file-extension-in-import: ["error", "always"]*/

import eslint from "eslint"
import foo from "./path/to/a/file.js"

never ​

Examples of 👎 incorrect code for the "never" option:

js
/*eslint n/file-extension-in-import: ["error", "never"]*/

import foo from "./path/to/a/file.js"

Examples of 👍 correct code for the "never" option:

js
/*eslint n/file-extension-in-import: ["error", "never"]*/

import eslint from "eslint"
import foo from "./path/to/a/file"

.xxx ​

Examples of 👍 correct code for the ["always", { ".js": "never" }] option:

js
/*eslint n/file-extension-in-import: ["error", "always", { ".js": "never" }]*/

import eslint from "eslint"
import script from "./script"
import styles from "./styles.css"
import logo from "./logo.png"

Shared Settings ​

tsconfigPath ​

This can be configured in the shared settings settings.tsconfigPath. Please see the shared settings documentation for more information.

typescriptExtensionMap ​

This can be configured in the shared settings settings.typescriptExtensionMap. Please see the shared settings documentation for more information.

🔎 Implementation ​

Released under the Apache License 2.0.