Lodash メソッドは lodash.mapvalues
、lodash.pickby
などといったスタンドアロンの メソッドごとのパッケージ で利用できます。これらのパッケージには、メソッドに依存するコードのみが含まれます。
しかしながら、これらのパッケージの利用は推奨されず、v5 では削除される予定です。
これらのパッケージは軽量に見えるかもしれませんが、プロジェクトでメソッドごとに複数のパッケージとメインの lodash
パッケージに依存する場合、通常は node_modules
と webpack/rollup バンドルのサイズが増加します。メインの lodash
パッケージの多くのメソッドはコードを共有しているのに対し、メソッドごとのパッケージは内部的に依存するコードのコピーをバンドルします。
たとえば、throttle
は内部的に debounce
を使用します。メインの lodash
パッケージから両方のメソッドを使用するプロジェクトの場合、throttle
は debounce
を直接インポートするコードと同じ debounce
モジュールをインポートするため、debounce
のコピーは 1 つしか webpack バンドルに含まれません。
その一方で、プロジェクトが lodash.throttle
から throttle
をインポートする場合、lodash.throttle
に内部的にバンドルされている debounce
の追加コピーが、メインの lodash
パッケージまたは lodash.debounce
からの debounce
に加えて webpack バンドルに含まれます。
lodash
は十分に軽量じゃない!心配いはいりません。たとえば const throttle = require('lodash/throttle')
のようにメソッドを直接インポートまたは require すると、パッケージが使用する lodash コードのサブセットのみがパッケージを使用するプロジェクトにバンドルされます。
このようなインポート方法が面倒だと思われる場合は、babel-plugin-lodash
を使用して import { throttle, debounce } from 'lodash'
といったトップレベルの named import を direct import ステートメントに変換できます。
さらに、webpack や rollup といった最新のツリーシェイキングバンドラは、直接インポートや babel プラグインを使用しなくても不要なコードをバンドルしなくなります。
lodash
パッケージに移行するメソッドごとのパッケージのインポートをメインの lodash
パッケージのインポートに変換するための jscodeshift トランスフォーム が利用できます。