Skip to content

ESLint plugin that enforces destructured imports from lodash-es with auto-fixing and provides configurable function usage policies.

License

ilovepixelart/eslint-plugin-lodash-es

eslint-plugin-lodash-es

npm npm GitHub
Coverage Quality Gate Status
Reliability Rating Maintainability Rating Security Rating

ESLint plugin that enforces destructured imports from lodash-es with auto-fixing and provides configurable function usage policies.

Key Benefits:

  • πŸ”§ Auto-fixes imports for better tree-shaking
  • πŸ“¦ Reduces bundle size significantly
  • πŸ›‘οΈ Configurable function usage policies
  • πŸ’‘ Intelligent suggestions for native alternatives
  • πŸ“ Full TypeScript support

Installation

npm install -D eslint-plugin-lodash-es

Usage

Flat config

// eslint.config.js (ESLint 9+)
import eslintPluginLodashEs from 'eslint-plugin-lodash-es'

export default [
  ...eslintPluginLodashEs.configs.recommended
]

Define config

import { defineConfig } from 'eslint/config'

// Base
import globals from 'globals'
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
// Plugins
import eslintPluginStylistic from '@stylistic/eslint-plugin'
import eslintPluginLodashEs from 'eslint-plugin-lodash-es'

export default defineConfig(
  {
    ignores: ['dist/', 'node_modules/', 'coverage/'],
  },
  {
    languageOptions: {
      globals: {
        ...globals.browser, // or globals.node
      },
    },
  },
  //Base
  eslint.configs.recommended,
  tseslint.configs.strict,
  tseslint.configs.stylistic,
  // Plugins
  eslintPluginStylistic.configs.recommended,
  eslintPluginLodashEs.configs.recommended
)

Manual Configuration

// eslint.config.js (ESLint 9+)
export default [
  {
    plugins: { 'lodash-es': eslintPluginLodashEs },
    rules: {
      'lodash-es/enforce-destructuring': 'error',
      'lodash-es/no-chaining': 'error',
      'lodash-es/no-method-imports': 'error',
      'lodash-es/enforce-functions': ['error', { exclude: ['forEach'] }],
      'lodash-es/suggest-native-alternatives': 'warn',
    }
  }
]

Legacy Config (ESLint 8)

// .eslintrc.js
module.exports = {
  extends: ['plugin:lodash-es/recommended-legacy']
}

What it does

1. Enforces Destructured Imports

Transforms this:

import _ from 'lodash-es'
const result = _.first([1, 2, 3])

Into this (automatically):

import { first } from 'lodash-es'
const result = first([1, 2, 3])

2. Transforms to Native JavaScript

Transforms this:

import { map, first, groupBy } from 'lodash-es'

const doubled = map([1, 2, 3], x => x * 2)
const firstItem = first(items)
const grouped = groupBy(users, 'department')

Into this (automatically):

import { map, first, groupBy } from 'lodash-es'

const doubled = [1, 2, 3].map(x => x * 2)
const firstItem = items.at(0)
const grouped = Object.groupBy(users, user => user.department)

Supports 104+ lodash functions with automatic transformation to modern JavaScript equivalents, including ES2022+ features like Array.at() and Object.groupBy().

Recently Added Native Alternatives (37 new functions)

Array slice operations: drop, dropRight, take, takeRight Math & arithmetic: add, subtract, multiply, divide, sum, mean Number utilities: clamp, inRange, random String transformations: capitalize, lowerFirst, upperFirst (using modern .at()) Type checking: isDate, isRegExp, isError, isSet, isWeakMap, isWeakSet, isSymbol, isSafeInteger Type conversion: castArray, toArray, toFinite, toInteger, toSafeInteger Comparisons: eq, gt, gte, lt, lte Function utilities: bind, delay, defer Object creation: create Utility stubs: identity, noop, stubArray, stubFalse, stubObject, stubString, stubTrue

Rules

Rule Description πŸ’‘ πŸ”§ βœ…
enforce-destructuring Enforce destructured imports from lodash-es πŸ”§ βœ…
no-chaining Prevent chaining that kills tree-shaking πŸ’‘ πŸ”§ βœ…
no-method-imports Prevent deprecated per-method imports πŸ’‘ πŸ”§ βœ…
enforce-functions Transform lodash functions to native JavaScript πŸ’‘ πŸ”§
suggest-native-alternatives Suggest native JavaScript alternatives πŸ’‘ πŸ”§

Legend: πŸ’‘ Suggestions β€’ πŸ”§ Auto-fixable β€’ βœ… Recommended

Why Use This?

Bundle Size: Reduces bundle from ~70KB (full lodash-es) to ~1KB per function

Better Tree Shaking: Modern bundlers eliminate unused code more effectively

Team Standards: Enforce consistent lodash usage across your codebase

Documentation

See detailed rule documentation for configuration options and examples.

Contributing

Contributions welcome! See CONTRIBUTING.md for details.

About

ESLint plugin that enforces destructured imports from lodash-es with auto-fixing and provides configurable function usage policies.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks