This ESLint plugin disallows imports from index files to enforce better module structure and avoid potential issues with circular dependencies.
To install the plugin, you need to have ESLint already installed in your project. If you don't have ESLint installed, you can install it using npm or yarn:
npm install eslint --save-dev
# or
yarn add eslint --devThen, install the eslint-plugin-no-index-import plugin:
npm install @kubit-ui-web/eslint-plugin-no-index-import --save-dev
# or
yarn add @kubit-ui-web/eslint-plugin-no-index-import --devTo use the plugin, you need to add it to your ESLint configuration file (e.g., .eslintrc.js).
Add no-index-import to the plugins array and configure the rule in the rules section:
module.exports = {
// Other ESLint configurations...
plugins: ['@kubit-ui-web/no-index-import'],
rules: {
'@kubit-ui-web/no-index-import/no-index-import': 'error',
},
};You can also configure aliases and ignore specific imports:
module.exports = {
// Other ESLint configurations...
plugins: ['@kubit-ui-web/no-index-import'],
rules: {
'@kubit-ui-web/no-index-import/no-index-import': [
'error',
{
aliases: {
'@components': './src/components',
'@utils': './src/utils',
},
ignoreImports: ['@/components/loader', '@/types/customToken'],
},
],
},
};Here is an example of a complete ESLint configuration file with the no-index-import plugin:
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: [
'react',
'@typescript-eslint',
'@kubit-ui-web/no-index-import/no-index-import',
],
rules: {
'@kubit-ui-web/no-index-import/no-index-import': [
'error',
{
aliases: {
'@components': './src/components',
'@utils': './src/utils',
},
ignoreImports: ['@/components/loader', '@/types/customToken'],
},
],
},
};This rule disallows importing from index files or directories containing an index file. It helps to enforce better module structure and avoid potential issues with circular dependencies.
aliases: An object where keys are alias names and values are the corresponding paths.ignoreImports: An array of import paths to ignore.
Given the following project structure:
src/
components/
index.ts
button.ts
utils/
index.ts
logger.ts
index.ts
The following imports would be disallowed:
import { Button } from '@/components'; // Disallowed
import { Logger } from '@/utils'; // DisallowedBut the following imports would be allowed:
import { Button } from '@/components/button'; // Allowed
import { Logger } from '@/utils/logger'; // AllowedIf you have any ideas, bug reports, or feature requests, feel free to open an issue or submit a pull request. We welcome contributions from the community and are happy to help with any questions you may have.