eslint-plugin-no-same-feature-absolute-import
v1.0.1
Published
ESLint rule to prevent using absolute imports within the same feature module
Downloads
6
Maintainers
Readme
eslint-plugin-no-same-feature-absolute-import
An ESLint plugin for feature-based architecture that prevents using absolute imports when importing from within the same feature module.
Installation
pnpm install --save-dev eslint-plugin-no-same-feature-absolute-importUsage
ESLint 9+ (Flat Config)
// eslint.config.js
import noSameFeatureAbsoluteImport from "eslint-plugin-no-same-feature-absolute-import";
export default [
{
plugins: {
"no-same-feature": noSameFeatureAbsoluteImport,
},
rules: {
"no-same-feature/no-same-feature-absolute-import": "error",
},
},
];ESLint 8 and below (Legacy Config)
{
"plugins": ["no-same-feature-absolute-import"],
"rules": {
"no-same-feature-absolute-import/no-same-feature-absolute-import": "error"
}
}What it does
This rule enforces the use of relative imports when importing from within the same feature module, instead of absolute imports.
❌ Incorrect
// File: src/feature/user-management/components/UserCard.tsx
import Button from "@/user-management/components/Button";
import UserService from "@/user-management/services/UserService";✅ Correct
// File: src/feature/user-management/components/UserCard.tsx
import Button from "./Button";
import UserService from "../services/UserService";
// Importing from a different feature is allowed
import ProductCard from "@/product-catalog/components/ProductCard";Configuration
The rule accepts an options object with the following properties:
featureModulePath (string)
The path to your feature modules directory.
Default: "src/feature"
importPrefix (string)
The prefix used for absolute imports.
Default: "@/"
Examples
// Custom feature path and import prefix
export default [
{
plugins: {
"no-same-feature": noSameFeatureAbsoluteImport,
},
rules: {
"no-same-feature/no-same-feature-absolute-import": [
"error",
{
featureModulePath: "/src/business",
importPrefix: "~/",
},
],
},
},
];// Legacy config with custom feature path and import prefix
{
"rules": {
"no-same-feature-absolute-import/no-same-feature-absolute-import": [
"error",
{
"featureModulePath": "src/modules",
"importPrefix": "@/"
}
]
}
}Why use this rule?
Core Benefits:
- Encourage local dependencies: Promotes using nearby files within the same feature, improving code locality and cohesion
- Instant source identification: Makes it immediately clear what's internal vs external - you can spot cross-feature dependencies at a glance
- Visual dependency mapping: Absolute imports
@/feature-name/...instantly reveal which external features you're depending on
Supported Directory Structures
This plugin works with various feature-based architectures:
src/
├── feature/
│ ├── user-management/
│ │ ├── components/
│ │ ├── services/
│ │ └── types/
│ └── product-catalog/
│ ├── components/
│ └── hooks/
└── shared/
└── utils/apps/
└── web/
└── src/
└── business/
├── authentication/
└── dashboard/