日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Webpack实现按需打包Lodash的几种方法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文轉(zhuǎn)自:http://www.jb51.net/article/113235.htm

前言

在數(shù)據(jù)操作時,Lodash 就是我的彈藥庫,不管遇到多復(fù)雜的數(shù)據(jù)結(jié)構(gòu)都能用一些函數(shù)輕松拆解。

ES6 中也新增了諸多新的對象函數(shù),一些簡單的項目中 ES6 就足夠使用了,但還是會有例外的情況引用了少數(shù)的 Lodash 函數(shù)。一個完整的 Lodash 庫,即使是壓縮后,現(xiàn)最新版本也有 71k 的體積。不能為了吃一口飯而買下一個飯店啊。

針對這個問題,其實已經(jīng)有很多可選方案了。

函數(shù)模塊

Lodash 中的每個函數(shù)在 NPM 都有一個單獨(dú)的發(fā)布模塊。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/函數(shù)名的格式單獨(dú)引入需要的函數(shù)模塊。

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

使用插件優(yōu)化

在簡單場景下,以上兩種方式足以解決問題。

而遇到復(fù)雜的數(shù)據(jù)對象時,我們不得不在一個文件中引入多個 Lodash 函數(shù),這樣就需要在文件中寫多個require或import相關(guān)函數(shù)。

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

正寫到關(guān)鍵處卻因為引入一個函數(shù)要拉到文件頭部去定義引用而打亂了思路,很不爽!

于是我機(jī)智的到 Github 去搜索了webpack和lodash兩個關(guān)鍵詞的組合,排在首位的?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中,也可以單獨(dú)定義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 函數(shù)的文件中只需要引用一次 lodash,即可調(diào)用任意函數(shù)而不會造成完全打包。

import?_?from?'lodash' _.add(1,?2)?//?打包時只會引入這一個函數(shù)模塊

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

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


轉(zhuǎn)載于:https://blog.51cto.com/rozwel/1944764

總結(jié)

以上是生活随笔為你收集整理的Webpack实现按需打包Lodash的几种方法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。