A shareable and extensible ESLint configuration for JavaScript, TypeScript, Angular, Markdown, and JSON projects.
Ensure the required peer dependencies are installed:
npm install -D eslint @eslint/js @eslint/markdown @eslint/json typescript typescript-eslint angular-eslint eslint-config-prettier eslint-plugin-promise
For TypeScript projects, consider creating a tsconfig.eslint.json
file to prevent issues with project-wide type checking:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"noEmit": true
},
"include": ["src", "test", "tools"]
}
To install the ESLint configuration package, run:
npm install -D @ebarooni/eslint-config
For JavaScript projects that don’t use TypeScript:
Ensure "type": "module"
is set in package.json
:
{
"name": "my-project",
"type": "module"
}
Then, create eslint.config.js
or eslint.config.mjs
:
import eb from "@ebarooni/eslint-config";
export default {
...eb.javascript,
files: ["*.js", "*.mjs"],
ignores: ["*.html"],
};
For TypeScript projects, extending the JavaScript configuration:
// @ts-check
import eb from "@ebarooni/eslint-config";
import tseslint from "typescript-eslint";
export default tseslint.config(...eb.typescript, {
languageOptions: {
parserOptions: {
project: ["./tsconfig.eslint.json", "./packages/*/tsconfig.json"],
tsconfigRootDir: import.meta.dirname,
},
},
});
For Angular projects, extending the TypeScript configuration:
// @ts-check
import eb from "@ebarooni/eslint-config";
import tseslint from "typescript-eslint";
export default tseslint.config(...eb.angular, {
languageOptions: {
parserOptions: {
project: ["**/tsconfig*.json"],
tsconfigRootDir: import.meta.dirname,
},
},
});
To enable linting for Markdown files:
import eb from "@ebarooni/eslint-config";
export default {
eb.markdown,
files: ["*.md"]
};
To enable linting for JSON files:
import eb from "@ebarooni/eslint-config";
export default {
eb.json,
files: ["*.json"]
};
To simplify linting and fixing errors, add these scripts to your package.json
:
{
"scripts": {
"eslint": "npx eslint",
"eslint:check": "npm run eslint -- .",
"eslint:fix": "npm run eslint . --fix"
}
}
Run these commands:
-
Check for linting issues:
npm run eslint:check
-
Automatically fix linting errors:
npm run eslint:fix
This ESLint config is extensible, allowing you to customize it for your project.
To override specific rules, extend the configuration in eslint.config.js
:
import eb from "@ebarooni/eslint-config";
export default {
...eb.typescript,
rules: {
"no-console": "off",
indent: ["error", 4],
},
};
If you want different rules per directory:
import eb from "@ebarooni/eslint-config";
export default [
{
...eb.javascript,
files: ["src/**/*.js"],
},
{
...eb.typescript,
files: ["src/**/*.ts"],
},
{
...eb.markdown,
files: ["docs/**/*.md"],
},
{
...eb.json,
files: ["config/**/*.json"],
},
];