我看到导入整个 lodash 库会占用相当多的磁盘空间:
$ du . | grep lodash
1696 ./lodash/fp
5000 ./lodash
在我的代码中,我只是在做
require('lodash');
我的包.json看起来像:
"dependencies": {
...
"lodash": "^4.6.1",
...
}
请注意,这仅适用于后端项目,不适用于 Web,如果这有所不同的话。
所以我的问题是 - 只导入一片 lodash(只是我需要的功能)而不导入整个该死的东西的最新方法是什么?
看起来这里有一些答案:
https://gist.github.com/callumlocke/bbfc524eaed6b3556dab
我的猜测是我应该为我的后端项目使用点语法:
"dependencies": {
...
"lodash.X": "^4.6.1",
...
}
然后像这样导入它:
require('lodash.X');
两种方式
有两种方法可以做到这一点:
- 您可以使用具有单独功能的包,例如
require('lodash.head')
- 您可以使用完整的软件包,例如
require('lodash/head')
require('lodash.head')
安装具有单独功能的软件包:
npm install --save lodash.head
这会将其添加到package.json:
"dependencies": {
"lodash.head": "^4.0.1"
}
您可以将其用于:
var head = require('lodash.head');
require('lodash/head')
安装完整的lodash
包:
npm install --save lodash
这会将其添加到package.json:
"dependencies": {
"lodash": "^4.17.4"
}
您可以将其用于:
var head = require('lodash/head');
更多示例
更复杂的示例:
您可以使用所需的两个功能进行_
:
var head = require('lodash.head');
var tail = require('lodash.tail');
var _ = {pick, defaults};
效果相似,风格不同:
var _ = {
head: require('lodash.head'),
tail: require('lodash.tail'),
};
解释
如果你只想要lodash的一部分,例如lodash.pick,那么使用:
- https://www.npmjs.com/package/lodash.pick
有关打包为模块的单个函数的更多示例,请参阅:
- https://www.npmjs.com/browse/keyword/lodash-modularized
您还可以使用自定义构建,请参阅:
- https://lodash.com/custom-builds
当您使用完整包并仅导入所需的函数时:
var _ = {
head: require('lodash/head'),
tail: require('lodash/tail'),
};
然后,像 Webpack 这样的一些工具可能能够优化您的构建,以仅包含您实际使用的代码。当您使用以下命令导入整个 lodash 时:
var _ = require('lodash');
然后,静态分析无法确定在运行时将使用哪个函数,因此很难很好地优化,并且通常构建中包含的代码比实际需要的要多。
使用 ES6 模块,也可以像这样完成:
import isEqual from 'lodash.isequal';
参考
如本答案所述,您可以使用lodash-es
作为替代方法。而不是为要使用的每个 lodash 函数运行npm install lodash ...
。通过使用lodash-es
你只需要安装一次,然后你可以导入你想要在代码中使用的任何lodash函数。
使用 NPM 安装lodash-es
:
npm install lodash-es
要导入特定功能,isEqual
说,
import { isEqual } from "lodash-es";
现在,您可以在代码中使用isEqual
函数。
const a = {a: "a"};
const b = {b: "b"};
if (isEqual(a, b)) {
//do something
}
虽然,这仅适用于您情况下的后端项目。但是,仅供参考和其他可能登陆这里的读者,webpack
加lodash-es
可以将我的捆绑包大小从一般lodash
78 kb
减少到18 kb
。