前言
在数据操作时,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按需加载打包chunk命名的方法,包括了Webpack按需加载打包chunk命名的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近,遇到复杂h5页面开发,为了优化H5首屏加载速度,想到使用按需加载的方式,减少首次加载的JavaScript文件体积,于是将处理过程在这里记录一下,涉及到的主要是以下三点: 使用Webpack如何做按需加载 filename和chun
本文向大家介绍webpack打包优化的几个方法总结,包括了webpack打包优化的几个方法总结的使用技巧和注意事项,需要的朋友参考一下 为什么要优化打包? 项目越做越大,依赖包越来越多,打包文件太大 单页面应用首页白屏时间长,用户体验差 我们的目的 减小打包后的文件大小 首页按需引入文件 优化 webpack 打包时间 优化方式 1、 按需加载 1.1 路由组件按需加载 1.2 第三方组件和插件。
通过vite中rollup打包,如何对lodash做按需打包? 这两种写法在build时 第一种dist体积比第二种要大。都说是第一种写法是将整个lodash打包进了dist。我这里有一个疑问,rollup在build时不是会对代码做按需打包吗? rollup的树摇不会起作用吗? 假设整个项目只使用了一个throttle函数,也会将整个lodash打包到dist吗? 虽然lodash是 cjs规范
本文向大家介绍详解iOS 计步器的几种实现方式,包括了详解iOS 计步器的几种实现方式的使用技巧和注意事项,需要的朋友参考一下 这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用HealthKit框架从手机健康App中获取计步数据。另外玩了一下写入数据到健康App。有描述不当之处,望指点。 花絮(用HealthKit框架构建app,写入数据到苹
本文向大家介绍详解Java文件下载的几种实现方式,包括了详解Java文件下载的几种实现方式的使用技巧和注意事项,需要的朋友参考一下 Java文件下载的几种方式,具体如下: //支持在线打开文件的一种方式 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Nginx实现404页面的几种方法(三种),包括了Nginx实现404页面的几种方法(三种)的使用技巧和注意事项,需要的朋友参考一下 一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看。 第一种:Nginx自己的错误页面 Nginx访问一个静态的html 页面,当这个页面没有的时候,Nginx抛出404,那么如何返回给客户端