Webpack实现按需打包Lodash的几种方法详解

发布时间 - 2026-01-11 01:01:47    点击率:

前言

在数据操作时,Lodash 就是我的弹药库,不管遇到多复杂的数据结构都能用一些函数轻松拆解。

ES6 中也新增了诸多新的对象函数,一些简单的项目中 ES6 就足够使用了,但还是会有例外的情况引用了少数的 Lodash 函数。一个完整的 Lodash 库,即使是压缩后,现最新版本也有 71k 的体积。不能为了吃一口饭而买下一个饭店啊。

针对这个问题,其实已经有很多可选方案了。

函数模块

Lodash 中的每个函数在 NPM 都有一个单独的发布模块。NPM: results for ‘lodash'

假如你只需要使用_.isEqual,那么你只需要安装lodash.isequal模块,然后按以下方式引用。

var isEqual = require('lodash.isequal')
// or ES6
import isEqual from 'lodash.isequal'
isEqual([1, 2, 3], [1, 2, 3]) // true

全路径引用

在你完整安装 Lodash 后,可以按lodash/函数名的格式单独引入需要的函数模块。

var difference = require('lodash/difference')
// or ES6
import difference from 'lodash/difference'
difference([1, 2], [1, 3]) // [2]

使用插件优化

在简单场景下,以上两种方式足以解决问题。

而遇到复杂的数据对象时,我们不得不在一个文件中引入多个 Lodash 函数,这样就需要在文件中写多个require或import相关函数。

import remove from 'lodash/remove'
import uniq from 'lodash/uniq'
import invokeMap from 'lodash/invokeMap'
import sortBy from 'lodash/sortBy'
// more...

正写到关键处却因为引入一个函数要拉到文件头部去定义引用而打乱了思路,很不爽!

于是我机智的到 Github 去搜索了webpack和lodash两个关键词的组合,排在首位的 lodash-webpack-plugin 就是为了解决这个问题而生。

使用时需要以下模块,其实除了前两个剩下的一般都已安装了:

$ npm i -S lodash-webpack-plugin babel-plugin-lodash babel-core babel-loader babel-preset-es2015 webpack

配置:

webpack.config.js
var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
var webpack = require('webpack');
module.exports = {
 module: {
 loaders: [{
 loader: 'babel',
 test: /\.js$/,
 exclude: /node_modules/,
 query: {
 plugins: ['transform-runtime', 'lodash'],
 presets: ['es2015']
 }
 }]
 },
 plugins: [
 new LodashModuleReplacementPlugin,
 new webpack.optimize.OccurrenceOrderPlugin,
 new webpack.optimize.UglifyJsPlugin
 ]
}

其中babel-plugin-lodash的配置,也就是plugins: ['lodash'] ,并不是一定要在loaders中,也可以单独定义babel。

webpack.config.js
var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
var webpack = require('webpack');
module.exports = {
 module: {
 loaders: [{
 loader: 'babel',
 test: /\.js$/,
 exclude: /node_modules/
 }]
 },
 babel: {
 presets: ['es2015'],
 plugins: ['transform-runtime', 'lodash']
 },
 plugins: [
 new LodashModuleReplacementPlugin,
 new webpack.optimize.OccurrenceOrderPlugin,
 new webpack.optimize.UglifyJsPlugin
 ]
}

又或者是.babelrc文件中。

以上工作完成了,在每个你需要使用 lodash 函数的文件中只需要引用一次 lodash,即可调用任意函数而不会造成完全打包。

import _ from 'lodash'
_.add(1, 2) // 打包时只会引入这一个函数模块

注意:必须要使用 ES2015 的模块引用方式才有效。

以上即是我目前所知道的几种方式,如果哪位朋友有更好的方式(比如只需要全局引入一次),请一定分享与我!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# webpack  # lodash  # 打包  # 打包命令  # webpack如何打包一个按需引入的vue组件库  # Webpack按需加载打包chunk命名的方法  # Vue.js中用webpack合并打包多个组件并实现按需加载  # Webpack中实现条件组件的按需打包的多种方法  # 关键词  # 只需要  # 多个  # 这一  # 都有  # 也有  # 会有  # 有很多  # 两种  # 这个问题  # 数据结构  # 只会  # 与我  # 或者是  # 几种  # 即使是  # 解决问题  # 可选  # 写到  # 这篇文章 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Internet Explorer官网直接进入 IE浏览器在线体验版网址  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何快速查询域名建站关键信息?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  iOS中将个别页面强制横屏其他页面竖屏  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何快速建站并高效导出源代码?  LinuxCD持续部署教程_自动发布与回滚机制  个人摄影网站制作流程,摄影爱好者都去什么网站?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Python自动化办公教程_ExcelWordPDF批量处理案例  如何用PHP快速搭建高效网站?分步指南  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  JavaScript常见的五种数组去重的方式  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  EditPlus 正则表达式 实战(3)  黑客如何通过漏洞一步步攻陷网站服务器?  如何在云虚拟主机上快速搭建个人网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  详解Android中Activity的四大启动模式实验简述  文字头像制作网站推荐软件,醒图能自动配文字吗?  微信小程序 配置文件详细介绍  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何使用查询构建器?(Query Builder高级用法)  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何快速生成凡客建站的专业级图册?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Swift中swift中的switch 语句  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何在Windows虚拟主机上快速搭建网站?  Android中AutoCompleteTextView自动提示  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  米侠浏览器网页背景异常怎么办 米侠显示修复  如何基于PHP生成高效IDC网络公司建站源码?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何快速搭建高效可靠的建站解决方案?