Shared ESLint configuration for JavaScript projects using the new ESLint flat config.
- 🎯 Optimized for modern JavaScript development
- 🔄 Uses the new ESLint flat config system
- 🎨 Integrates with Prettier for consistent code formatting
- ✅ Comprehensive test suite using ESLint's RuleTester
- 📦 Includes carefully selected plugins and rules:
-
eslint-plugin-import
: Better import/export syntax handling -
eslint-plugin-simple-import-sort
: Automated import sorting -
eslint-plugin-promise
: Promise-related best practices -
eslint-plugin-regexp
: Regular expression safety and best practices
-
# Using npm
npm install --save-dev @wonse/eslint-js eslint
# Using yarn
yarn add --dev @wonse/eslint-js eslint
# Using pnpm
pnpm add -D @wonse/eslint-js eslint
Create an eslint.config.js
file in your project root:
import jsConfig from '@wonse/eslint-js';
export default [
...jsConfig,
// Your custom configurations (optional)
];
The base configuration includes:
- Modern JavaScript features (ES2022)
- Module-based development
- Browser, ES2021, and Node.js globals
- Prettier integration for formatting
- Comprehensive set of plugins and rules
You can extend or override the configuration in several ways:
- Adding New Rules:
import jsConfig from '@wonse/eslint-js';
export default [
...jsConfig,
{
rules: {
'no-console': 'off',
'import/no-default-export': 'error',
},
},
];
- Targeting Specific Files:
import jsConfig from '@wonse/eslint-js';
export default [
...jsConfig,
{
files: ['src/**/*.js'],
rules: {
'no-console': 'warn',
},
},
];
- Adding Custom Plugins:
import jsConfig from '@wonse/eslint-js';
import somePlugin from 'eslint-plugin-some-plugin';
export default [
...jsConfig,
{
plugins: {
'some-plugin': somePlugin,
},
rules: {
'some-plugin/some-rule': 'error',
},
},
];
This configuration includes a carefully selected set of rules from various plugins:
- Enforces strict equality (
===
) checks - Prevents usage of
var
- Encourages use of
const
where possible - Warns about
console
statements - Warns about
debugger
statements - Warns about
alert
statements
- Sorts imports automatically by groups:
- Built-in Node.js modules
- External packages
- Internal packages (with
@/
alias support) - Parent/sibling imports
- Index imports
- Object imports
- Type imports
- Enforces consistent import ordering:
- Alphabetical sorting within groups
- Required newlines between groups
- Static analysis:
- Prevents circular dependencies (max depth: 1)
- Prevents self imports
- Prevents useless path segments
- Prevents absolute paths
- Prevents webpack loader syntax
- Prevents relative package imports
- Helpful warnings:
- Warns about deprecated imports
- Prevents mutable exports
- Warns about unused modules
- Style guide:
- No file extensions (except for .json)
- Default exports are optional
- Ensures imports come first in file
- Prevents duplicate imports
- Enforces newlines after imports
- Enforces best practices for promises
- Prevents common async/await mistakes
- Ensures safe and optimal regex patterns
- Prevents common regex mistakes
This package includes a comprehensive test suite that verifies all included ESLint rules are working as expected. The tests use ESLint's RuleTester
class to validate both valid and invalid code patterns for each rule.
# Using npm
npm test
# Using yarn
yarn test
# Using pnpm
pnpm test
The test suite covers:
- JavaScript Best Practices (e.g., no-var, no-console)
- Import/Export Rules (e.g., simple-import-sort)
- Promise Handling (e.g., require-await)
- Code Quality Rules (e.g., sonarjs/no-identical-expressions)
Each rule is tested with:
- ✅ Valid code examples that should pass
- ❌ Invalid code examples that should fail
- 🔄 Autofix output where applicable
Contributions are welcome! Please feel free to submit a Pull Request.
MIT
Wonse Shin (@shinwonse)