ESLint Plugin for Restricting and Replacing Import.
Automatically fixable with replacement package!
You'll first need to install ESLint:
npm i eslint --save-dev
Next, install eslint-plugin-restrict-replace-import
:
npm install eslint-plugin-restrict-replace-import --save-dev
Add restrict-replace-import
to the plugins section of your .eslintrc
configuration file. You can omit the eslint-plugin-
prefix:
{
"plugins": ["restrict-replace-import"]
}
Then configure the rules you want to use under the rules section.
{
"rules": {
"restrict-replace-import/restrict-import": ["error", ["restricted-package1", "restricted-package2"]]
}
}
You can also specify an alternative package to import instead:
{
"rules": {
"restrict-replace-import/restrict-import": [
"error",
[
{
"target": "restricted-package1",
"replacement": "replacement-package1"
},
{
"target": "restricted-package2",
"replacement": "replacement-package2"
}
]
]
}
}
You can use RegExp for package name:
{
"rules": {
"restrict-replace-import/restrict-import": [
"error",
[
"with(?:-regex)?-support",
{
"target": "restricted-.*",
"replacement": "replacement-package"
}
]
]
}
}
Is it possible as well to perform multiple partial replacements by setting and Object in the replacement
property:
{
"rules": {
"restrict-replace-import/restrict-import": [
"error",
[
{
"target": "with-partial-.*",
"replacement": {
"par(regExp)?tial-": "successfully-",
"repla(regExp)?cements": "replaced",
"with-": ""
}
}
]
]
}
}
Given that rule configuration it will perform the following replacement:
Input:
import { useState } from 'with-partial-replacements'
Output:
import { useState } from 'successfully-replaced'
You can also restrict specific named imports from a package while allowing others:
{
"rules": {
"restrict-replace-import/restrict-import": [
"error",
[
{
"target": "restricted-module",
"namedImports": ["restrictedImport", "alsoRestricted"],
"replacement": "replacement-module" // Object is not supported yet
}
]
]
}
}
This configuration will:
- Allow:
import { allowedImport } from 'restricted-module'
- Replace:
import { restrictedImport } from 'restricted-module'
→import { restrictedImport } from 'replacement-module'
The rule handles various import scenarios:
- Named imports with aliases:
import { restrictedImport as aliasName }
- Mixed allowed/restricted imports: Will split into separate import statements
- Default exports with named imports
- Multiple restricted named imports
- Merging with existing imports from replacement module
Examples of complex scenarios:
// Before
import { existingImport } from 'replacement-module';
import { restrictedImport } from 'restricted-module';
// After
import { existingImport, restrictedImport } from 'replacement-module';
// Before
import defaultExport, { restrictedImport, allowed } from 'restricted-module';
// After
import { restrictedImport } from 'replacement-module'
import defaultExport, { allowed } from 'restricted-module'
🔧 Automatically fixable by the --fix
CLI option.
Name | Description | 🔧 |
---|---|---|
restrict-import | Prevent the Import of a Specific Package | 🔧 |