@anmiles/eslint-config
v10.0.3
Published
Base eslint config for all projects
Downloads
920
Readme
@anmiles/eslint-config
Base eslint config for all projects
Flat config
This config is based on ESLint 9 flat config.
To keep using legacy config, please consider installing @anmiles/[email protected]
Configs
| Config | Code |
|--------|--------------------|
| Base | ...configs.base |
| TS | ...configs.ts |
| React | ...configs.react |
| Jest | ...configs.jest |
For JS-only projects (without TS, Jest, React) use base config.
For more complex projects use combination of configs.
Note that base config is mandatory in all cases.
Installation
- Install this package
npm install --save-dev @anmiles/eslint-config - Install required devDependencies
- Base dependencies for all files:
npm install --save-dev eslint eslint-plugin-align-assignments eslint-plugin-i18next eslint-plugin-import eslint-plugin-n eslint-plugin-promise @eslint/compat @eslint/css @eslint/js @eslint/json @eslint/markdown @stylistic/eslint-plugin - Additional dependencies for TS:
npm install --save-dev @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-import-resolver-typescript jiti typescript - Additional dependencies for React:
npm install --save-dev eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-redux eslint-plugin-react-refresh - Additional dependencies for Jest:
npm install --save-dev eslint-plugin-jest jest
- Base dependencies for all files:
Usage
Extend all needed configs in your
./eslint.config.mjs(or./eslint.config.jsfor ESM projects)- For JS-only projects (without TS, React, Jest) use base config:
import { configs } from '@anmiles/eslint-config'; export default [ ...configs.base, /* your own config */ ]; - For more complex projects use combination of configs
- Backend TS project with Jest:
import { configs } from '@anmiles/eslint-config'; export default [ ...configs.base, ...configs.ts, ...configs.jest, /* your own config */ ]; - Frontend TS project with React and Jest:
import { configs } from '@anmiles/eslint-config'; export default [ ...configs.base, ...configs.ts, ...configs.jest, ...configs.react, /* your own config */ ];
- Backend TS project with Jest:
- Also you can use type-checked config -
./eslint.config.mts(or./eslint.config.tsfor ESM projects). This requiresjiti(why?)import type { Linter } from 'eslint'; import { configs } from '@anmiles/eslint-config'; export default [ ...configs.base, ...configs.ts, ...configs.jest, ...configs.react, /* your own config */ ] as Linter.Config[];
- For JS-only projects (without TS, React, Jest) use base config:
Specify npm commands
"lint": "eslint", "lint:fix": "eslint --fix"--extparameter is not used in Flat Config mode- Specifying target directory (
.) is not needed in Flat Config mode
Example
Javascript:
import stylisticEslintPlugin from '@stylistic/eslint-plugin';
import { patterns, configs } from '@anmiles/eslint-config';
export default [
...configs.base,
...configs.ts,
...configs.jest,
{
ignores : [
'coverage/*',
'dist/*',
'**/__snapshots__/*',
],
},
{
files : patterns.base,
rules : {
'@stylistic/max-len' : [ 'error', {
code : 100,
tabWidth : 4,
ignoreComments : true,
} ],
'@stylistic/object-property-newline' : [ 'error', {
allowAllPropertiesOnSameLine : true,
} ],
// override for TS-ESM project
'import/extensions' : [ 'error', 'ignorePackages', {
'js' : 'always',
'mjs' : 'always',
'ts' : 'never',
'mts' : 'never',
} ],
},
},
{
files : patterns.ts,
rules : {
'@typescript-eslint/no-unsafe-type-assertion' : [ 'off' ],
},
},
];Typescript:
import stylisticEslintPlugin from '@stylistic/eslint-plugin';
import type { Linter } from 'eslint';
import { patterns, configs } from '@anmiles/eslint-config';
export default [
...configs.base,
...configs.ts,
...configs.jest,
{
ignores : [
'coverage/*',
'dist/*',
'**/__snapshots__/*',
],
},
{
files : patterns.base,
rules : {
'@stylistic/max-len' : [ 'error', {
code : 100,
tabWidth : 4,
ignoreComments : true,
} ],
'@stylistic/object-property-newline' : [ 'error', {
allowAllPropertiesOnSameLine : true,
} ],
// override for TS-ESM project
'import/extensions' : [ 'error', 'ignorePackages', {
'js' : 'always',
'mjs' : 'always',
'ts' : 'never',
'mts' : 'never',
} ],
},
},
{
files : patterns.ts,
rules : {
'@typescript-eslint/no-unsafe-type-assertion' : [ 'off' ],
},
},
] as Linter.Config[];Exported constants
Patterns and extensions are also exported.
import { patterns, configs } from '@anmiles/eslint-config';
console.log(extensions.base); // [ '.js', '.mjs', '.cjs', '.jsx', '.ts', '.cts', '.mts', '.tsx' ]
console.log(extensions.jest); // [ '.test.js', '.test.mjs', '.test.cjs', '.test.jsx', '.test.ts', '.test.cts', '.test.mts', '.test.tsx' ]
console.log(patterns.ts); // [ '**/*.ts', '**/*.cts', '**/*.mts', '**/*.tsx' ]
console.log(patterns.react); // [ '**/*.js', '**/*.mjs', '**/*.cjs', '**/*.jsx', '**/*.ts', '**/*.cts', '**/*.mts', '**/*.tsx' ]Notes
package-lock.jsondoesn't have to be ignored. It's already ignored in configuration forjsonplugin insidebaseconfig.node_modulesdoesn't have to be ignored. It's implicitly ignored by ESLint.- Remember to provide
filesoption in override sections to specify a set of extensions for which the section applies.- There are some patterns to use (see above)
- Don't keep
.eslintignorefile when using Flat Config. Useignoresconfig key instead (see the example above).
Migration to ESLint V9 flat configuration
Version 9 is based on ESLint V9 flat configuration. See migration guide if you had been using version 8 or below.
