如何在 vite 中配置 Lodash Tree Shaking

Hea*_*ven 18 lodash tree-shaking vite

现在,我正在使用 Vite2.x 使用“rollup-plugin-visualizer”构建我的项目,我发现它构建了整个 lodash 包

那么,如何配置 vite2.x 来减少 lodash 包的大小 在此输入图像描述

小智 19

我发现这个问题是因为我遇到了类似的问题,也许这可以帮助将来遇到类似问题的人。

最简单的解决方法是使用如下所示的导入:

import uniqueId from "lodash/uniqueId";

这可确保您在使用 lodash 函数时向生产包添加最小的占用空间。

另一种方法是使用lodash-es可正确进行树摇动的库,然后您可以使用:

import { uniqueId } from "lodash-es";
Run Code Online (Sandbox Code Playgroud)

通过使用该lodash-es库,您可以安全地导入函数,并且您的项目最终不会在生产版本中包含整个 lodash 源代码。

有什么不同?

为什么可以安全地导入来自lodash-es但不能安全地导入 uniqueId lodash

如果你比较uniqueId源代码,你会发现它lodash-es使用 ES 模块,而 plainlodash使用 CommonJS 模块。

由于 Vite 使用 EcmaScript 模块,我认为只有那些模块是可进行 tree-shakeable 的(在其文档中找不到任何内容),CommonJS 模块一般来说更难进行 tree-shake,你通常需要做一些解决方法来对它们进行 treeshake。

有关 tree-shaking 的更多信息。

  • 使用 lodash-es 的一个更好的方法是,如果你想直接使用 _ 来调用 lodash 函数,你可以这样导入 lodash-es: `import * as _ from 'lodash-es';` 当你这样做时, Vite 会自动对未使用的函数进行 tree-shake,这意味着它将具有与 import {} from 'lodash-es';` 相同的包大小,而无需显式添加使用的函数 (2认同)