#
Setup a polyrepo
Execute the following steps to setup ESLint for a polyrepo solution (single project per repository) 👇
#
Install the packages
Open a terminal at the root of the solution and install the following packages:
pnpm add -D @workleap/eslint-configs @eslint/js @typescript-eslint/parser @types/node eslint typescript-eslint
#
Configure ESLint
First, create a configuration file named eslint.config.ts at the root of the solution:
root
βββ src
βββββ ...
βββ package.json
βββ eslint.config.ts
Then, open the newly created file and extend the default configuration with one of the shared configurations provided by @workleap/eslint-configs 👇
#
Web application
For an application developed with TypeScript and React, use the following configuration:
import { defineWebApplicationConfig } from "@workleap/eslint-configs";
export default defineWebApplicationConfig(import.meta.dirname);
#
React library
For a TypeScript library developed with React, use the following configuration:
import { defineReactLibraryConfig } from "@workleap/eslint-configs";
export default defineReactLibraryConfig(import.meta.dirname);
#
React compiler
If your application is set up with the React compiler, enable the React Compiler rules:
import { defineReactLibraryConfig } from "@workleap/eslint-configs";
export default defineReactLibraryConfig(import.meta.dirname, {
react: {
compiler: true
}
});
#
TypeScript library
For a TypeScript library developed without React, use the following configuration:
import { defineTypeScriptLibraryConfig } from "@workleap/eslint-configs";
export default defineTypeScriptLibraryConfig(import.meta.dirname);
#
Ignore files and folders
ESLint can be configured to ignore certain files and folders by specifying one or more glob patterns.
To do so, extend the eslint.config.ts file configuration at the root of the solution:
import { defineWebApplicationConfig } from "@workleap/eslint-configs";
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([
"packages",
"samples",
"docs"
]),
defineWebApplicationConfig(import.meta.dirname)
]);
The configuration ignores common folders by default, such as node_modules, dist, storybook-static, .git, .turbo etc. Before manually adding more ignored files or folders, make sure that ESLint is actually processing them.
#
Configure the indent style
@stylistic/eslint-plugin offers built-in rules for configuring the indentation style of a codebase. However, there's a catch: when VS Code auto-formatting feature is enabled, it might conflict with the configured indentation rules if they are set differently.
To guarantee a consistent indentation, we recommend using EditorConfig on the consumer side. With EditorConfig, the indent style can be configured in a single file and be applied consistently across various formatting tools, including ESlint and VS Code.
First, create a .editorconfig file at the root of the solution:
root
βββ src
βββββ ...
βββ package.json
βββ eslint.config.ts
βββ .editorconfig
Then, open the newly created file and paste the following configuration:
root = true
[*]
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 4
[*.md]
trim_trailing_whitespace = false
Finally, install the EditorConfig.EditorConfig VS Code extension.
#
Add a CLI script
At times, especially when running the CI build, it's useful to lint the entire solution using a single command. To do so, add the following script to your solution's package.json file:
{
"lint:eslint": "eslint . --max-warnings=0 --cache --cache-location node_modules/.cache/eslint"
}
The script definition may vary depending of your needs and your application configuration. For example, you might want to specify specific file extensions such as
--ext .js,.ts,.tsx.
#
Custom configuration
New projects shouldn't have to customize the default configurations offered by @workleap/eslint-configs. However, if you are in the process of migrating an existing project to use this library or encountering a challenging situation, refer to the custom configuration page to understand how to override or extend the default configurations. Remember, no locked in ❤️✌️.
#
Try it 🚀
To test your new ESLint setup, open a JavaScript file, type invalid code (e.g. var x = 0;), then save. Open a terminal at the root of the solution and execute the
pnpm lint:eslint
The terminal should output a linting error.
#
Troubleshoot issues
Refer to the troubleshooting page.