Lodash methods are available in standalone per method packages
like lodash.mapvalues
, lodash.pickby
, etc.
These packages contain only the code the method depends on.
However, use of these packages is discouraged and they will be removed in v5.
Although they may seem more lightweight, they will usually increase the size of
node_modules
and webpack/rollup bundles in a project that
transitively depends on multiple per method packages and/or the main
lodash
package. Whereas many methods in the main
lodash
package share code, the per method packages internally
bundle copies of any code they depend on.
For example, throttle
uses debounce
internally.
In a project using both methods from the main lodash
package,
throttle
will import the same debounce
module as
any code that imports debounce
directly, so only one copy of
debounce
will wind up in a webpack bundle.
On the other hand, if a project imports throttle
from
lodash.throttle
, the extra copy of the debounce
code internally bundled into lodash.throttle
will wind
up in the webpack bundle, in addition to debounce
from the main
lodash
package or lodash.debounce
.
lodash
isn't lightweight enough!
Don't worry—if you import or require methods
directly, e.g. const throttle = require('lodash/throttle')
, only
the subset of lodash code your package uses will be bundled
in projects that use your package.
If importing this way seems cumbersome, you can use
babel-plugin-lodash
to transform named top-level imports like
import { throttle, debounce } from 'lodash'
into direct import statements.
Furthermore, modern tree-shaking bundlers like webpack and rollup can avoid bundling code you don't need even if you don't use direct imports or the babel plugin.
lodash
package
A jscodeshift transform is available to convert per method package imports
to main lodash
package imports.