ESlint plugin to define custom module dependency rules.
npm install eslint-plugin-strict-dependenciesESLint plugin to define custom module dependency rules.
NOTE: eslint-plugin-strict-dependencies uses tsconfig, tsconfig.json must be present.
```
npm install eslint-plugin-strict-dependencies --save-dev
- strict-dependencies
- module: string (Glob or Forward matching string)string[]
- Target module path
- targetMembers: ["Suspense"]
- Target member name
- e.x. in import { Suspense } from 'react'string[]
- allowReferenceFrom: (Glob or Forward matching string)boolean
- Paths of files where target module imports are allowed.
- allowSameModule: boolean
- Whether it can be imported by other files in the same directory
- excludeTypeImportChecks: import type { Suspense } from 'react'
- Whether to exclude type import checks
- e.x.
- resolveRelativeImport: boolean[default = false]src/components/aaa.ts
- Whether to resolve relative import as in the following example
- `
typescript`
import bbb from './bbb';
resolveRelativeImport = false
- : Resolve as ./bbb (excluded from lint target)resolveRelativeImport = true
- : Resolve as src/components/bbb: (included from lint target)
- pathIndexMap: object[default = null]0
- In eslint-plugin-strict-dependencies, path alias resolution is performed based on the paths specified in the tsconfig.
- By default, the value with an index number of is used, but you can specify an option to use a value with any index number.tsconfig.json
- Specify it as in the following example:
- `
json`
{
"compilerOptions": {
"": ["aaa/", "bbb/*"]
},
}
pathIndexMap = { "": 1 }
- : "bbb/" is used.
.eslintrc:
`js
"plugins": [
"strict-dependencies",
],
"rules": {
"strict-dependencies/strict-dependencies": [
"error",
[
/**
* Example:
* Limit the dependencies in the following directions
* pages -> components/page -> components/ui
*/
{
"module": "src/components/page",
"allowReferenceFrom": ["src/pages"],
// components/page can't import other components/page
"allowSameModule": false
},
{
"module": "src/components/ui",
"allowReferenceFrom": ["src/components/page"],
// components/ui can import other components/ui
"allowSameModule": true,
// components/ui exclude type import checks
"excludeTypeImportChecks": true
},
/**
* example:
* Disallow to import next/router directly. it should always be imported using libs/router.ts.
*/
{
"module": "next/router",
"allowReferenceFrom": ["src/libs/router.ts"],
"allowSameModule": false
},
/**
* example:
* Disallow to import Suspense from react. it should always be imported using libs/react.ts.
*/
{
"module": "react",
"targetMembers": ["Suspense"],
"allowReferenceFrom": ["src/libs/react.ts"],
"allowSameModule": false
},
],
// options
// {
// "resolveRelativeImport": true
// "pathIndexMap": { "*": 1 }
// }
]
}
``
MIT