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


Posted in Javascript onMay 08, 2017

前言

在数据操作时,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 的模块引用方式才有效。

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

总结

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

Javascript 相关文章推荐
基于jquery的3d效果实现代码
Mar 23 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
js获取当前日期前七天的方法
Feb 28 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
js判断一个字符串是以某个字符串开头的简单实例
Dec 27 Javascript
JavaScript数据结构之链表的实现
Mar 19 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
angular动态表单制作
Feb 23 Javascript
官方推荐react-navigation的具体使用详解
May 08 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
JS脚本实现定时到网站上签到/签退功能
Apr 22 Javascript
详细分析Node.js 多进程
Jun 22 Javascript
JS正则表达式验证中文字符
May 08 #Javascript
bootstrap table表格插件使用详解
May 08 #Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 #Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 #Javascript
jquery平滑滚动到顶部插件使用详解
May 08 #jQuery
H5上传本地图片并预览功能
May 08 #Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 #jQuery
You might like
数据库的日期格式转换
2006/10/09 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
分享php多功能图片处理类
2016/05/15 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
从零学Python之入门(四)运算
2014/05/27 Python
python开发中range()函数用法实例分析
2015/11/12 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
快速了解Python中的装饰器
2018/01/11 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
实习单位评语
2014/04/26 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
2015元旦感言
2015/12/09 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python