首页 > 其他分享 >如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试

如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试

时间:2024-08-17 16:22:48浏览次数:12  
标签:ES Lodash Tree es import Shaking Vite lodash

文章目录


前言

在现代前端开发中,优化代码的体积和构建速度是非常重要的。特别是在使用 Vite 作为构建工具时,如何正确地处理 Lodash 这种通用的工具库,变得尤为关键。在本文中,我将分享我们如何在 Vite 项目中优化 Lodash 的引入方式,并确保优化后的代码能够正常运行。

问题背景

在项目中,我们经常使用 Lodash 提供的各种实用函数。传统的方式是直接使用 import _ from 'lodash' 来引入整个 Lodash 库。然而,这种方式有几个明显的问题:

  1. 冗余模块加载:由于 import _ from 'lodash' 会加载整个库,即使我们只用了其中的几个函数,整个库的所有模块都会被加载。

  2. Tree Shaking 无效:Lodash 使用的是 CommonJS 模块系统,而 Vite 的 Tree Shaking 依赖于 ES Module(ESM)的静态分析。因此,Vite 无法有效地在构建时剔除未使用的 Lodash 模块。

解决方案概述

我们分析了几个优化 Lodash 引入方式的解决方案,并最终决定采用更适合我们项目需求的方案。

思路 1:使用 Lodash-ES 替代 Lodash

Lodash-ES 是一个 ES Module 版本的 Lodash,可以很好地与 Vite 的 Tree Shaking 配合。使用 lodash-es 可以确保未使用的模块在构建时被有效地剔除。

操作步骤

  1. 安装 Lodash-ES

    • 在项目中安装 lodash-es,以替代传统的 lodash
    npm install lodash-es
    
  2. 全局替换 import _ from 'lodash'import { functionName } from 'lodash-es'

    • 逐步将项目中的 import _ from 'lodash' 替换为按需引入的 lodash-es 版本。
    • 示例代码:
    // 原始代码
    import _ from 'lodash';
    
    const data = [1, 2, 3];
    const result = _.map(data, (item) => item * 2);
    
    // 替换后的代码
    import {
          map } from 'lodash-es';
    
    const data = [1, 2, 3];
    const result = map(data, (item) => item * 2);
    
  3. 批量替换工具

    • 可以使用 VSCode 的全局搜索和替换功能

标签:ES,Lodash,Tree,es,import,Shaking,Vite,lodash
From: https://blog.csdn.net/Bruce__taotao/article/details/141267498

相关文章

  • 安装git-format-staged后,Sourcetree中提交代码报错的解决方案
    pre-commit文件中内容为:git-format-staged--formatter"swiftformatstdin--stdinpath'{}'""*.swift" 在终端中,gitcommit不会报错。Sourcetree中提交具体错误:git-format-staged或者swiftformat命令找不到。解决方案一:利用Automator(自动操作)新建一个SourceTree应......
  • [Java基础]TreeMap
    为什么有了hashmap还要有treemapHASHMAP的特性和适用场景HashMap是基于哈希表的Map接口实现。这使得它在插入和查询键值对时能够保持平均常数时间的性能。由于这个特性,它特别适用于需要快速存取键值对的场景。HashMap的特性:操作性能:HashMap提供了O(1)时间性能对于基本操作,如......
  • 界面控件DevExpress .NET MAUI v24.1 - 发布TreeView等新组件
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力......
  • 【数据结构】TreeMap和TreeSet
    目录前言TreeMap实现的接口内部类常用方法TreeSet实现的接口常用方法前言Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对。......
  • CF1528C Trees of Tranquillity
    小清新找性质题,想到关键就很简单考虑在第一棵树上枚举一条从\(1\)到某个点的链,显然这些点之间满足第一个限制,现在只要在这些点中选出尽可能多的点满足第二个限制即可在第二棵树上两个点没有祖先关系,等价于它们对应的DFS序区间相离而两个点的DFS序区间显然要么相离要么包......
  • TreeMapTest1
    packagecom.shujia.day15;importjava.util.Map;importjava.util.Set;importjava.util.TreeMap;/*"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)*/publicclassTreeMapTest1{publicstaticvoidmain(String[]args)......
  • CF1943C Tree Compass
    思路:考虑往直径方向想,设直径的长度为\(d\)。首先可以注意到一个性质:每次操作最多只会覆盖住直径的\(2\)个点,那么答案的下界即为\(\lceil\frac{d}{2}\rceil\)。分类讨论一下。若\(d\)为奇数,则存在唯一的一个直径中心\(u\):那么答案为\((u,0),(u,1),\cdots,(u,\l......
  • CF1149C Tree Generator™
    题意\(n\)个点,\(m\)个询问。给你一棵树的括号序列,输出它的直径。有\(m\)次询问,每次询问表示交换两个括号,输出交换两个括号后的直径(保证每次操作后都为一棵树)输出共\(m+1\)行。\(3\len\le100\,000,1\leq\le100\,000\)——洛谷翻译。思路我们不难想到,一个......
  • clickhouse_mergeTree
    MergeTree类型Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(*MergeTree)中的其他引擎。MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不......
  • QSortFilterProxyModel和QTreeView排序功能
    1、需求,创建一个树有多层结构,同一层按照插入顺序逆序排列; ui.treeView->setHeaderHidden(true);//treewidget头标题是否显示,此处隐藏标题//ui.treeWidget->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);ui.treeView->header()->s......