@jchiam/eslint-config
v5.0.2
Published
my personal ESLint rules
Readme
ESLint Config
My personal shareable ESLint config. Targets TypeScript projects, with an optional React extension.
Requirements
- ESLint 9 (ESLint 10 not yet supported due to
eslint-plugin-importpeer dep constraints) typescript-eslint^8eslint-plugin-import^2.29
React projects additionally need:
eslint-plugin-react^7.32eslint-plugin-react-hooks^5
Usage
npm i -D @jchiam/eslint-config eslint typescript-eslint eslint-plugin-importCreate eslint.config.js in your project root:
// eslint.config.js — TypeScript project
import jchiamConfig from '@jchiam/eslint-config';
export default [...jchiamConfig];// eslint.config.js — React + TypeScript project
import jchiamConfig from '@jchiam/eslint-config';
import jchiamReact from '@jchiam/eslint-config/react';
export default [...jchiamConfig, ...jchiamReact];Override rules by appending a config object to the array:
import jchiamConfig from '@jchiam/eslint-config';
export default [
...jchiamConfig,
{
rules: {
'prefer-const': 'warn', // override to warn instead of error
},
},
];What's included
recommended.js
eslint:recommended— ESLint core rulestypescript-eslintrecommended ruleseslint-plugin-importrecommended + TypeScript resolver@stylistic/eslint-pluginfor formatting (indent, spacing, quotes, semi, etc.)- Additional opinionated rules for best practices and ES6+
react.js
Extends recommended.js intent with:
eslint-plugin-reactrecommended (withreact/prop-typesoff for TypeScript)eslint-plugin-react-hooksrules of hooks + exhaustive deps
Breaking Changes
v4 to v5
Migrated to ESLint flat config (required for ESLint 9+). The .eslintrc format is no longer supported.
Note: delete your existing node_modules and package-lock.json before reinstalling — the old lockfile pins conflicting major versions and will cause resolution errors.
Install the new peer dependencies:
npm i -D typescript-eslintRemove the old peer dependencies (now bundled or renamed):
npm uninstall @typescript-eslint/eslint-plugin @typescript-eslint/parserConfig format changes from .eslintrc.js:
// Before (.eslintrc.js)
module.exports = {
extends: ['@jchiam/eslint-config/recommended'],
};To eslint.config.js:
// After
import jchiamConfig from '@jchiam/eslint-config';
export default [...jchiamConfig];Rule changes:
- Formatting rules moved from ESLint core to
@stylistic/eslint-plugin(same rules, prefixed with@stylistic/) no-shadow/no-use-before-definereplaced by their@typescript-eslint/*equivalents (TS-aware, no false positives on type declarations)no-new-objectrenamed tono-object-constructorvars-on-topremoved (redundant —no-varis enforced and@typescript-eslint/no-use-before-definecovers the intent)@typescript-eslint/indentremoved (was deprecated and broken;@stylistic/indentis used instead)
v3 to v4
The original config file was split from index.js into recommended.js and react.js to allow non-React projects to use only the base config.
// Before
{ "extends": "@jchiam" }
// After
{ "extends": ["@jchiam/eslint-config/recommended", "@jchiam/eslint-config/react"] }