当前位置:首页 > 日记 > 正文

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

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

前言

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

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

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

函数模块

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

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

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

全路径引用

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

var difference = require('lodash/difference')// or ES6import 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.jsvar 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.jsvar 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 的模块引用方式才有效。

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

总结

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

相关文章

清空元素html |  innerHTML= 与 em

清空元素html | innerHTML= 与 em

推荐,元素,清空,区别,电脑软件,一、清空元素的区别 1、错误做法一: $("#test").html("");//该做法会导致内存泄露 2、错误做法二: $("#test")[0].innerHTML=""; ;//该做法会导致内存泄露 3、正确做…

qq安全中心如何设置禁止登陆游戏qq

qq安全中心如何设置禁止登陆游戏qq

方法,安全中心,登录,设置,游戏,  如果我们不喜欢玩qq游戏,为了保护自己qq账号的安全,我们可以在qq安全中心中设置禁止登陆游戏。你知道qq安全中心如何设置禁止登陆游戏吗?下面就让小编告诉大家qq安全中心设置禁止登陆游戏 的方法。qq安全中…

ppt如何添加重叠动画效果图解

ppt如何添加重叠动画效果图解

动画效果,方法,重叠,叠加,电脑软件,  你知道在ppt里怎样设置叠加动画效果 吗?对于大多数人来说还是不太懂添加叠加动画的方法,下面就让小编告诉你ppt叠加动画效果的方法,欢迎大家来到学习。ppt添加叠加动画效果的方法一ppt添加叠加动画效果…

JavaScript利用闭包实现模块化

JavaScript利用闭包实现模块化

模块化,闭包,电脑软件,JavaScript,利用闭包的强大威力,但从表面上看,它们似乎与回调无关。下面一起来研究其中最强大的一个:模块。function foo() { var something = "cool"; var another = [1, 2, 3]; function doSomething() { console.lo…

Excel怎么设置超期提醒功能Excel超

Excel怎么设置超期提醒功能Excel超

设置,方法,功能,电脑软件,Excel,  利用Excel函数对表格设置超期提醒功能。可以让你知道哪些客户超期了,在你给客户办会员卡的时候非常有用。小面小编教你怎么在Excel设置超期提醒功能,希望对你有帮助!Excel超期提醒功能设置方法假设Excel表…

关于jQuery里prev | 的简单操作代

关于jQuery里prev | 的简单操作代

操作,代码,简单,电脑软件,jQuery,prev() 函数被用来匹配元素集的前一个兄弟元素,仅仅只有前一个兄弟元素被选择,其子元素将被忽略。这里给大家介绍jQuery里prev()的简单操作,具体内容如下:一个朋友提了个需求给我:点击按钮删除input,如果input剩…

手机端转换rem适应

手机端转换rem适应

转换,手机端,电脑软件,rem,话不多说,请看代码:<script> (function() { var changeRem = function() { document.getElementsByTagName('html')[0].style.fontSize = document.documentElement.clientWidth / 20 + 'px'; }; cha…

PPT2010中如何对插入的进行自定义

PPT2010中如何对插入的进行自定义

自定义样式,中对,图片,电脑软件,  我们所操作的图片大都是矩形的,如果直接插入文档中并不好看,默认自带的样式极其有限,不过可以通过对插入的图片进行自定义样式,使它跟内容更加和谐符合我们的审美需求。以下是小编为您带来的关于PPT2010中对…

AI怎么使用混合工具设计一款渐变立

AI怎么使用混合工具设计一款渐变立

渐变,混合,工具,文字,电脑软件,ai中有很多功能,今天我们就来看看使用ai中的混合工具设计一款里的的文字海报图的教程。软件名称:Adobe Illustrator CS6 (AI cs6) 精简绿色中文版(32位+64位)软件大小:205MB更新时间:2014-05-111、首先键入需要的…

如何设置PPT2007中图表区的格式

如何设置PPT2007中图表区的格式

图表,设置,格式,如何设置,电脑软件,  在PPT的使用中,难免还是会有一些操作是我们还没完全掌握的,就像有朋友反映不会修改PPT图表区的格式,其实这也没什么难的。以下是小编为您带来的关于设置PPT2007图表区的格式,希望对您有所帮助。设置PPT20…

nodejs 实现钉钉ISV接入的加密解密

nodejs 实现钉钉ISV接入的加密解密

方法,加密解密,电脑软件,nodejs,ISV,这是我开发Worktile钉钉版本的时候遇到的当时感觉比较难的地方,现在写下来方法供大家学习交流解密方法exports.decryptMsg = function (text) { var aes_msg_buffer = new Buffer(text, 'base64'); var…

在excel中如何按字体颜色进行排序

在excel中如何按字体颜色进行排序

排序,字体颜色,电脑软件,excel,  在整理Excel表格数据时,有时数据没有及时分类,导致数据多而杂。那么对于特别的数据,我们可以用颜色字体标记出来,需要时可按字体颜色进行排序。以下是小编为您带来的关于在excel中按字体颜色进行排序,希望对您…