npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

eslint-config-acme

v4.0.1

Published

ESLint + Prettier config for React

Readme

ESLint + Prettier Config for React

Shareable config for ESLint and Prettier, aimed primarily to be used in React projects.

[!IMPORTANT] Version 4.0 and above of this config requires ESLint 9 minimum and supports ONLY the new ESLint flat config format. If you require the legacy config format, please use version 3 of this package.

Overview

This is a shareable config for ESLint code linter, for use in JavaScript and TypeScript projects.

The goal of this configuration is to get code linting and formatting up and running as quickly as possible in a modern development environment, without sacrificing cleanliness and readability.

Installation

To install the package, run:

npm install -D eslint-config-acme

This will install the shared config, as well as the following peer dependencies:

ESLint

Prettier

If using TypeScript, then you'll also need to install typescript-eslint:

npm install -D typescript-eslint

Usage

Flat Config Format

To start using this shared config, create an estlint.config.* file (or update your existing one), and import the desired configuration.

There are two configurations available - base (for JavaScript) and typescript (for TypeScript):

import base from 'eslint-config-acme/base';

// and optionally, if using TypeScript:
import typescript from 'eslint-config-acme/typescript';

// or alternatively, if using both:
import { base, typescript } from 'eslint-config-acme';

Import the base in your config file (eg. eslint.config.mjs):

// eslint.config.mjs
import base from 'eslint-config-acme/base';
import { defineConfig } from 'eslint/config';

const config = defineConfig([
  base,
  // ...other configurations (optional)
]);

export default config;

TypeScript

If using TypeScript, make sure that the optional peer dependency typescript-eslint is installed:

npm install -D typescript-eslint

Then, import the typescript config (in addition to the base one):

// eslint.config.mjs
import { base, typescript } from 'eslint-config-acme';
import { defineConfig } from 'eslint/config';

const config = defineConfig([
  base,
  typescript,
  // ...other configurations (optional)
]);

export default config;

Usage with other plugins and configurations

You can also extend your configuration with any other ESLint plugin or config in addition to eslint-config-acme, and specify other configuration objects if desired as well.

For example, here's how to add eslint-plugin-sonarjs and override some of the rules:

import base from 'eslint-config-acme/base';
import sonarjs from 'eslint-plugin-sonarjs';
import { defineConfig } from 'eslint/config';

const config = defineConfig([
  base,
  sonarjs.configs.recommended,
  {
    rules: {
      'sonarjs/cognitive-complexity': 'warn',
    },
  },
]);

export default config;

Import Alias

Aliases are pre-configured in this config by default, using eslint-import-resolver-typescript (for both JavaScript and TypeScript):

{
  // ...
  settings: {
    'import-x/resolver-next': [
      // ...
      createTypeScriptImportResolver({
        alias: {
          '~': [path.resolve(__dirname, './src')],
          '@': [path.resolve(__dirname, './src')],
          '#': [path.resolve(__dirname, './src')],
          src: [path.resolve(__dirname, './src')],
          internals: [path.resolve(__dirname, './internals')],
        },
        // ...
      }),
    ],
  }
}

This maps shorthands like ~, @, # and src to the ./src directory in your project, which allows you to write imports like this anywhere in your code:

import Foo from '@/components/Foo';
// or
import Foo from '#/components/Foo';
// or
import Foo from '~/components/Foo';
// or
import Foo from 'src/components/Foo';

instead of relative paths:

import Foo from '../../components/Foo';

Use this alongside absolute imports and module path aliases in Next.js.

These aliases can also be customized in your local configuration file, and new ones added, if needed:

// eslint.config.mjs
import { fileURLToPath } from 'node:url';
import path from 'path';

import { base, typescript } from 'eslint-config-acme';
import { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';
import { defineConfig } from 'eslint/config';

const dirname = path.dirname(fileURLToPath(import.meta.url));

const config = defineConfig([
  base,
  typescript,
  {
    settings: {
      'import-x/resolver-next': [
        createTypeScriptImportResolver({
          alias: {
            app: [path.resolve(dirname, './path/to/app')],
            src: [path.resolve(dirname, './path/to/src')],
          },
        }),
      ],
    },
  },
]);

export default config;

In the example above, app is a new alias, and src is customized to point to a different path.

Prettier

This config supports Prettier integration out of the box. Rules that may conflict with ESLint are disabled via eslint-config-prettier.

Shared Config

This package provides a shared Prettier config for use alongside ESLint.

To enable, create a Prettier config file (.prettierrc, .prettierrc.js, etc.), and import the shared Prettier config.

JSON:

// .prettierrc
'eslint-config-acme/prettier';

CommonJS:

// .prettierrc.js
/** @type {import("prettier").Config} */
const acme = require('eslint-config-acme/prettier');

module.exports = acme;

ESM:

// .prettierrc.mjs
/** @type {import("prettier").Config} */
import acme from 'eslint-config-acme/prettier';

export default acme;

If you'd like to override any of the default options, you can use the spread operator (...) to extend the default config:

// .prettierrc.mjs
/** @type {import("prettier").Config} */
import acme from 'eslint-config-acme/prettier';

const config = {
  ...acme,
  plugins: [...acme.plugins, 'prettier-plugin-tailwindcss'], // Use additional plugins alongside included ones
  singleQuote: false, // Override defaults
  tailwindStylesheet: './resources/css/app.css', // Set options for plugins, ie. Tailwind CSS
};

export default config;

Import Sorting

Import statement sorting is enabled via @ianvs/prettier-plugin-sort-imports, with the following default importOrder set:

{
  "importOrder": [
    "<TYPES>",
    "<TYPES>^[.]",
    "",
    "<BUILT_IN_MODULES>",
    "",
    "^react$",
    "<THIRD_PARTY_MODULES>",
    "",
    "^(src|~|@|#)(/.*)$",
    "",
    "^[.]"
  ]
}

This will take import statements like these:

import fs from 'node:fs';

import { module } from 'package-name';

import foo from '@/foo';

import main from '../index';
import { bar } from './bar';

And turn them into this:

import fs from 'node:fs';

import { module } from 'package-name';

import foo from '@/foo';

import main from '../index';
import { bar } from './bar';

See the plugin docs for more information on how to customize this option.

Adding Scripts

Add the following to your package.json file to define a script that will lint all known files and output the results:

// package.json
{
  "scripts": {
    "lint": "eslint --ignore-path .gitignore ."
  }
}

To fix all automatically-fixable issues, you can add the following script to your package.json as well (in addition to above):

// package.json
{
  "scripts": {
    "lint:fix": "npm run lint -- --fix"
  }
}

Note that you can update the above scripts as you see fit, this is just an example. See ESLint CLI reference for more details.

Author

Mykhaylo Ryechkin

License

MIT