Skip to content

base-js

npm version License: MIT Node.js ESLint

> Base ESLint flat config for JavaScript-only projects. Foundation extended by @jmlweb/eslint-config-base.

> ๐Ÿ”ง Maintenance mode: only dependency and security updates, no new rules. For new projects use @jmlweb/oxlint-config-base. To move an existing project, see the migration guide.

  • ๐ŸŽฏ Recommended rules: @eslint/js recommended for modern JavaScript (ES modules)
  • ๐Ÿ“ฆ Import sorting: imports and exports sorted by eslint-plugin-simple-import-sort
  • ๐ŸŽจ Prettier compatible: disables rules that conflict with Prettier
  • ๐ŸŒ Environment agnostic: no Node.js or browser globals by default
  • ๐Ÿ”ง Composable: extended by the TypeScript, React, Node.js and Astro configs
Terminal window
npm install --save-dev @jmlweb/eslint-config-base-js eslint @eslint/js eslint-config-prettier eslint-plugin-simple-import-sort

> ๐Ÿ’ก Upgrading? See the Migration Guide.

eslint.config.js
import baseJsConfig from '@jmlweb/eslint-config-base-js';
export default [
...baseJsConfig,
// Project-specific overrides
];
eslint.config.js
import baseJsConfig from '@jmlweb/eslint-config-base-js';
export default [
...baseJsConfig,
{
files: ['**/*.test.js', '**/*.spec.js'],
rules: {
'no-console': 'off',
},
},
{
ignores: ['dist/', 'build/', 'node_modules/'],
},
];
eslint.config.js
import baseJsConfig from '@jmlweb/eslint-config-base-js';
import globals from 'globals';
export default [
...baseJsConfig,
{
languageOptions: {
globals: globals.node,
},
},
];
eslint.config.js
import baseJsConfig from '@jmlweb/eslint-config-base-js';
import globals from 'globals';
export default [
...baseJsConfig,
{
languageOptions: {
globals: globals.browser,
},
},
];

globals is not a peer dependency; install it with npm install --save-dev globals.

Setting Value
Files **/*.js, **/*.mjs, **/*.cjs
ecmaVersion latest
sourceType module
Rules @eslint/js recommended
Import sorting simple-import-sort/imports: error
Export sorting simple-import-sort/exports: error
Prettier eslint-config-prettier rules applied

Imports are grouped as side effects, Node.js built-ins and external packages, internal absolute imports, then relative imports.

Before:

import './styles.css';
import { Component } from './component';
import React from 'react';
import fs from 'fs';

After eslint --fix:

import './styles.css';
import fs from 'fs';
import React from 'react';
import { Component } from './component';
  • โœ… JavaScript-only projects (no TypeScript)
  • โœ… Modern ESLint 9 or 10 flat config
  • โœ… A foundation for your own shared config

For TypeScript projects use @jmlweb/eslint-config-base. For new projects of any kind prefer @jmlweb/oxlint-config-base.

Spread the config, then add objects after it. Later entries win.

eslint.config.js
import baseJsConfig from '@jmlweb/eslint-config-base-js';
export default [
...baseJsConfig,
{
files: ['**/*.test.js'],
rules: {
'no-console': 'off',
},
},
];
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}
Terminal window
npm run lint
  • Node.js >= 22.12.0
  • ESLint ^9.0.0 || ^10.0.0 (flat config)
  • eslint (^9.0.0 || ^10.0.0)
  • @eslint/js (^9.0.0 || ^10.0.0)
  • eslint-config-prettier (^9.1.0 || ^10.0.0)
  • eslint-plugin-simple-import-sort (^12.0.0 || ^13.0.0 || ^14.0.0)

No typescript-eslint needed.

Node.js 18 and 20 are end-of-life. Node.js >= 22.12.0 is now required: it is the first Node.js 22 release that can require() ES modules without a flag, which the CommonJS build needs to load ESM-only plugins.

  1. Upgrade Node.js to 22.12.0 or later.
  2. Update the package: npm install --save-dev @jmlweb/eslint-config-base-js@latest.

See the Changelog.

MIT