Package Exports
- eslint-plugin-lodash-es
Readme
eslint-plugin-lodash-es
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-esUsage
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.