使用browserify/rollup/webpack为较小的构建加载单个lodash方法

jml*_*pez 5 rollup browserify lodash webpack

来自https://lodash.com/:

// Load a single method for smaller builds with browserify/rollup/webpack.
var chunk = require('lodash/chunk');
var extend = require('lodash/fp/extend');
Run Code Online (Sandbox Code Playgroud)

:这与大多数的方法效果很好each,map,isArray,等一个方法我得粗野,工作是lodash/chain.

我导入整个lodash库的当前代码如下所示:

_.chain(items)
  .filter(...)
  .groupBy(...)
  .map(...)
  .concat(...)
  .value();
Run Code Online (Sandbox Code Playgroud)

创建一个不包含lodash构建中包含的所有方法的正确可链接对象的正确方法是什么?该chain方法创建一个lodash包装器对象并返回它.我可以像这样创建自己的链式方法

var lodash = require('lodash/wrapperLodash');
var filter = require('lodash/filter');
var map = require('lodash/map');

function chain(value) {
  var result = lodash(value);
  result.__chain__ = true;
  result.filter = filter
  result.map = map;
  return result;
}

module.exports = chain;
Run Code Online (Sandbox Code Playgroud)

现在调用chain将能够执行filtermap.不幸的是,结果chain().filter将没有我在原始链中附加的方法.创建自定义可链接lodash对象的正确方法是什么?

Ber*_*fer 2

对此有不同的解决方案,尽管并非所有解决方案都保留链功能。

Lodash 定制构建(保持链)

将https://lodash.com/custom-builds与您的自定义方法一起使用。它将使用您需要的方法生成 lodash 构建。我过去发现这个解决方案的问题是,即使导入了一些方法,构建的大小也相当高,因为它需要将数据包装在其周围的整个 lodash 函数才能使用链。

仅导入您需要的功能(无链)

大多数 lodash 函数都可以作为 npm 中的独立包提供(例如 pick),因此您可以单独导入它们。不过,使用此解决方案您不会有链条。

从 lodash src 导入函数(无链)

另一个解决方案是从完整的 lodash 模块中导入特定的函数,因此任何捆绑器都只会使用该函数及其依赖项,而不是整个 lodash,例如:

var pick = require('lodash/pick');
Run Code Online (Sandbox Code Playgroud)

建议:不要使用链条

尽管您特别要求拥有该链,但我不鼓励您使用它,因为这是一种不好的函数式编程实践。查看这篇博客文章(正如您在第一条评论中提到的),了解为什么最好不要使用链以及如何摆脱它的非常全面的解释。