This rule allows you to forbid certain module imports and suggest alternatives. Supply the path to the file from the root to avoid confusion when multiple files share the same name in different directories.
Options are passed as a list after the severity (no nested array). Each item may be a string (module path or name) or an object with name, nameRegExp, use, and/or module.
.eslintrc or flat config:
{
"plugins": ["deprecate"],
"rules": {
"deprecate/import": [
"error",
{ "name": "path/to/legacyModule", "use": "newModule" },
{ "name": "a", "module": "path/to/legacyModule", "use": "newModule" },
{ "nameRegExp": "\\.sss$", "use": "css imports" }
]
}
}import a from 'path/to/legacyModule'
import a from '../../path/to/legacyModule'
import a from 'legacyModule'
import { a } from 'path/to/legacyModule'
const a = require('path/to/legacyModule');
const a = require('../../path/to/legacyModule');
const a = require('legacyModule');
const { a } = require('legacyModule');
const a = require('legacyModule').a;
import style from 'style.sss'Pass deprecated module names or paths as strings:
"deprecate/import": ["error", "path/to/legacyModule", "otherLegacy"]Or use objects for more control (suggested alternative, named imports, or regex):
Simple: name + optional use
"deprecate/import": ["error", { "name": "legacyModule", "use": "newModule" }]Named import from a specific module (forbid importing navigate from gatsby):
"deprecate/import": ["error", { "name": "navigate", "module": "gatsby", "use": "utils/navigate" }]Match by regex (e.g. forbid .sss imports):
"deprecate/import": ["error", { "nameRegExp": "\\.sss$", "use": "css imports" }]Object options:
- name (optional): Module path/name or named import to forbid.
- nameRegExp (optional): Regex pattern for module path (use either
nameornameRegExp, not both). - module (optional): When forbidding a named import, the module it must come from.
- use (optional): Message shown as the suggested alternative.
When you don't want to forbid specific module usage in your codebase.