lodash按需引入

摘要:
例如let_trim=require('lodash/trim')中的每个函数或从'lodash/trim'导入trim或lodash在NPM中有一个单独的释放模块。

lodash提供了很多可用的方法供我们使用,绝对是一个很好用且用起来得心应手的工具库。但是同时,lodash的体积也不小,我们项目中使用的大概522K,可能只是使用了几个方法,但是却把整个lodash库引入了。为了吃几条鱼,就承包了整个鱼塘,代价有点大呀!

对于这个问题,有几种方案可供选择。

一.引入单个函数

 lodash整个安装完之后,引用方式: lodash/function 格式,单独引入某个函数,如

let _trim= require('lodash/trim') 或者 import trim from 'lodash/trim' 

 或者 lodash 中的每个函数在 NPM 都有一个单独的发布模块,单独安装并引用部分模块,然后按以下方式引用

let _trim= require('lodash.trim') 或者 import trim from 'lodash.trim' 

trim(' 123123 ')

二.借助 lodash-webpack-plugin,babel-plugin-lodash插件优化

  使用上述两种方式,在使用较多个lodash中方法的情况下,不太美观,且并不方便。那么我们可以借助于lodash-webpack-plugin,去除未引入的模块,需要和babel-plugin-lodash插件配合使用。类似于webpack的tree-shaking。

  1)安装插件:npm i -S lodash-webpack-plugin babel-plugin-lodash

  2)webpack.conf.js中

  var LodashModuleReplacementPlugin = require('lodash-webpack-plugin')

  plugins: [ new LodashModuleReplacementPlugin()]

3).babelrc中配置 "plugins": ["transform-runtime","transform-vue-jsx","lodash"]

  或者在webpack.conf.js的rules配置

{
test: /.(js|jsx)$/,
loader: 'babel-loader',
exclude: /node_modules/,
include: [resolve('src'), resolve('test')]
options: {plugins: ['lodash']}
}

三.lodash-es结合tree-shaking

lodash-es 是着具备 ES6 模块化的版本,只需要直接引入就可以。

import {isEmpty,forIn, cloneDeep} from 'lodash-es'

tree-shaking的作用,即移除上下文中未引用的代码(dead code)

只有当函数给定输入后,产生相应的输出,且不修改任何外部的东西,才可以安全做shaking的操作

如何使用tree-shaking?

1).确保代码是es6格式,即 export,import

2).package.json中,设置sideEffects

3).确保tree-shaking的函数没有副作用

4).babelrc中设置presets [["env", { "modules": false }]] 禁止转换模块,交由webpack进行模块化处理

5).结合uglifyjs-webpack-plugin

免责声明:文章转载自《lodash按需引入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OGG相关操作高分屏显示模糊修复工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明

php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切、压缩、合并、插入文本、背景色透明等。并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法调用,如果是很复杂的操作建议服务器端搭shell命令行操作,因为api方法调用同操作对比命令行他更吃内存,并且效率没有命令行那么高。 本文章就对于这些常见操作...

【转】Sqlserver通过链接服务器访问Oracle的解决办法

一、创建sqlserver链接服务(sqlserver链接oracle)  首先sqlserver 链接oracle可以通过两个访问接口: “MSDAORA” 和“OraOLEDB.Oracle” 1、“MSDAORA”访问接口是由Microsoft OLE DB Provider for Oracle提供的,这里建议不使用此接口进行链接。通过该访问接口建...

【STM32H7教程】第13章 STM32H7启动过程详解

完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。启动过程相对来说...

Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏

  在数据库中难免会遇到需要对数据进行脱敏的操作,无论是姓名,还是身份证号。   最近遇到一个需求,需要对姓名进行脱敏: 姓名长度为2,替换为姓+*; 姓名长度为3,替换中间字符为*; 姓名长度为4,替换第3个字符为*;   经过一番搜索之后,最终找到了3种方式的实现,具体如下。 一、先查找,再替换 select replace('陈宏宏',subst...

函数式编程-compose与pipe

函数式编程中有一种模式是通过组合多个函数的功能来实现一个组合函数。一般支持函数式编程的工具库都实现了这种模式,这种模式一般被称作compose与pipe。以函数式著称的Ramda工具库为例。 const R = require('ramda'); function inc (num) { return ++num; } const fun1 = R.c...

7.qml-Qt对象

QML除了支持ECMAScript内置对象对象外,还自己给用户提供了许多宿主对象.当然用户也可以自己自定义对象. 内置对象 : 由 ECMAScript所提供的对象;如Object、Array、Math、Date等等。 宿主对象 :即由 ECMAScript 实现的宿主环境提供的对象,比如Qt对象. 自定义对象 :自定义构造函数所创建的对象。 本章我们...