Skip to content

Latest commit

 

History

History
117 lines (83 loc) · 3.21 KB

file-extension-in-import.md

File metadata and controls

117 lines (83 loc) · 3.21 KB

node/file-extension-in-import

enforce the style of file extensions in import declarations

  • ✒️ The --fix option on the command line can automatically fix some of the problems reported by this rule.

We can omit file extensions in import/export declarations.

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

However, --experimental-modules has declared to drop the file extension omition.

Also, we can import a variety kind of files with bundlers such as Webpack. In the situation, probably explicit file extensions help us to understand code.

📖 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.

{
    "node/file-extension-in-import": [
        "error",
        "always" or "never",
        {
            "tryExtensions": [".js", ".json", ".node"],
            ".xxx": "always" or "never",
        }
    ]
}
  • "always" (default) requires file extensions in import/export declarations.
  • "never" disallows file extensions in import/export declarations.
  • tryExtensions is the file extensions to resolve import paths. Default is [".js", ".json", ".node"].
  • .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:

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

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

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

/*eslint node/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:

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

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

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

/*eslint node/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:

/*eslint node/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

The following options can be set by shared settings. Several rules have the same option, but we can set this option at once.

  • tryExtensions
// .eslintrc.js
module.exports = {
    "settings": {
        "node": {
            "tryExtensions": [".js", ".json", ".node"]
        }
    },
    "rules": {
        "node/file-extension-in-import": "error"
    }
}

🔎 Implementation