需要一小部分 lodash 以最小化尺寸

Require small section of lodash to minimize size

我在 lodash 上使用 browserify,发现 lodash 构成了 browserified 的重要组成部分 bundled.js

我导入了整个 lodash,但目前我主要使用 cloneDeep 方法。

var lodash = require('lodash');

如何只导入 lodash 的必要部分以保持 bundled.js 小?我正在使用 node.js v6

您可以通过 require('lodash/cloneDeep') 仅选择 cloneDeep 方法。还有 babel-plugin-lodash to simplify cherry-picking and lodash-webpack-plugin 用于更小的捆绑包。

⚠️ 警告:“每个方法的独立包 will not be upgraded to v5" -

如果您使用的是 lodash <= 4,请继续阅读。


虽然 正题,但我将此作为未来读者的答案。

lodash 的每个功能都可以通过 npm 作为模块使用。有关可用模块的完整列表,请参阅 lodash-modularized

喜欢lodash.clonedeep

$ npm i --save lodash.clonedeep

可以这样使用:

var cloneDeep = require('lodash.clonedeep');

来自 lodash 主页:

Module Formats

Lodash is available in a variety of builds & module formats.

请注意,根据导入 lodash 的方式,调用 lodash 函数时会有所不同。

var lodash = require('lodash');
var clone = lodash.cloneDeep(obj);

如果您按照 John-David Dalton 的建议进行挑选,则需要以这种方式调用该函数。

var lodash_clonedeep = require('lodash/cloneDeep');
var clone = lodash_clonedeep(obj);

专家可能会忽略新手可能不知道正确调用 lodash 函数的方法的可能性。

我一直在构建一个简化的 lodash 函数包,这些函数的占用空间要小得多。 cloneDeep就是其中之一。您可以查看它是否适合您:https://github.com/simontonsoftware/micro-dash

您可以看到 in the jsdocs lodash 的 cloneDeep,当它是您导入的唯一函数时,仍然会引入 > 12K bytes 缩小版,而 micro-dash 的版本是< 300 bytes.

请注意自述文件中列出的差异。在cloneDeep的情况下,可能相关的点是:

  • Only designed to work with primitives, plain objects, and arrays. It it not designed or tested to handle inherited properties, symbol keys, arguments objects, primitive objects (e.g. Object(1)), Dates, Maps, Sets, etc.
  • A modern environment/buildchain is assumed. E.g. this project will not contain duplicates of ES6 functions (such as Array.isArray()), and it may use ES6 functions directly. If you target older browsers/environments, you may need to include polyfills separately. However, it will only use features that can be polyfilled.