需要一小部分 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" -
- Discontinue per method packages in favor of modular lodash
如果您使用的是 lodash <= 4,请继续阅读。
虽然 正题,但我将此作为未来读者的答案。
lodash 的每个功能都可以通过 npm 作为模块使用。有关可用模块的完整列表,请参阅 lodash-modularized。
$ 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.
我在 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" -
- Discontinue per method packages in favor of modular lodash
如果您使用的是 lodash <= 4,请继续阅读。
虽然
lodash 的每个功能都可以通过 npm 作为模块使用。有关可用模块的完整列表,请参阅 lodash-modularized。
$ 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.