ESLint basic configuration for personal projects.
npm install --save-dev eslint-config-chema22r
This ESLint config adds the rules modularly, depending on the needs of the project. Those are the possible extensions and their requirements:
Extension ID | Aim | Requirements (plugins) |
---|---|---|
eslint-config-chema22r | Frontend Backend |
eslint-plugin-import eslint-plugin-promise |
eslint-config-chema22r/jest | Frontend | eslint-plugin-jest |
eslint-config-chema22r/mocha | Backend | eslint-plugin-mocha |
eslint-config-chema22r/mongo | Backend | - |
eslint-config-chema22r/node | Backend | eslint-plugin-node |
eslint-config-chema22r/react | Frontend | eslint-plugin-react eslint-plugin-react-hooks |
All the extensions are compatible and can be combined.
All the extensions include a default configuration that can be overwritten (parserOptions, rules, settings, etc.).
All the extensions requirements must be installed or some of the imported rules might not work. E.g.: the extension eslint-config-chema22r imports a custom set of rules based on the extensions
eslint:all
,plugin:import/recommended
andplugin:promise/recommended
so in this case, not installing the plugin eslint-plugin-import or eslint-plugin-promise will disable all the rules related to the corresponding plugin, but the eslint rules will still be enabled.
{
"env": {
"browser": true,
"es2021": true,
"jest": true
},
"extends": [
"chema22r",
"chema22r/jest",
"chema22r/react"
],
"parserOptions": {
"ecmaFeatures": {
"impliedStrict": true,
"jsx": true
},
"ecmaVersion": 2021,
"sourceType": "module"
},
"parser": "babel-eslint",
"rules": {}
}
In this example, the
env
andparserOptions
fields are completely optional since they were already imported through the extensions used. Setting a different configuration here will merge and overwrite the imported one from the extensions. Important example: the importedparserOptions
looks exactly as in the example, so if we set a different one locally as"parserOptions": { "ecmaFeatures": { "jsx": false } }
, only the fieldjsx
will be overwritten, keeping all remaining fields intact, even theimpliedStrict
field withinecmaFeatures
.
{
"env": {
"es2021": true,
"mocha": true,
"mongo": true,
"node": true
},
"extends": [
"chema22r",
"chema22r/mocha",
"chema22r/mongo",
"chema22r/node"
],
"parserOptions": {
"ecmaFeatures": {
"impliedStrict": true
},
"ecmaVersion": 2021,
"sourceType": "module"
},
"rules": {}
}
In this example, the
env
andparserOptions
fields are completely optional since they were already imported through the extensions used. Setting a different configuration here will merge and overwrite the imported one from the extensions. Important example: the importedenv
looks exactly as in the example, so if we set a different one locally as"env": { "es2019": true }
, no field will be overwritten, keeping all remaining fields intact, even thees2021
field.