导入单个 lodash 函数而不是整个 lodash 项目



我看到导入整个 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');

两种方式

有两种方法可以做到这一点:

  1. 您可以使用具有单独功能的包,例如require('lodash.head')
  2. 您可以使用完整的软件包,例如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
}

虽然,这仅适用于您情况下的后端项目。但是,仅供参考和其他可能登陆这里的读者,webpacklodash-es可以将我的捆绑包大小从一般lodash78 kb减少到18 kb

最新更新