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

时间:2016-03-13 18:22:19

标签: webpack browserify lodash rollup

来自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');

这适用于大多数方法:eachmapisArray等。我无法使用的一种方法是lodash/chain

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

_.chain(items)
  .filter(...)
  .groupBy(...)
  .map(...)
  .concat(...)
  .value();

创建一个不包含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;

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

1 个答案:

答案 0 :(得分:1)

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

Lodash自定义构建(保持链)

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

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

大多数lodash函数在npm(example pick)中作为独立包提供,因此您可以单独导入它们。但是,你不会使用这个解决方案。

从lodash src导入函数(无链)

另一个解决方案是从你的完整lodash模块中导入特定的函数,所以任何bundler都只会使用它的依赖项来代替整个lodash,例如:

var pick = require('lodash/pick');

建议:不要使用链

虽然您特意要求使用该链,但我不鼓励您使用它,因为它是一种糟糕的函数式编程实践。检查this blog article(正如您在第一条评论中所提到的),详细解释为什么最好不要使用链,以及如何远离它。