博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack最小化lodash
阅读量:4670 次
发布时间:2019-06-09

本文共 4215 字,大约阅读时间需要 14 分钟。

lodash作为一个比较常用的前端开发工具集,在使用webpack进行vendor分离的实践中,会遇到将整个lodash文件分离到vendor.js的问题。这样会使vendor.js文件变得特别大。

webpack.config.js文件代码如下:

var path = require('path');module.exports = mode => {    return {        entry: {            A: './moduleA.js',            B: './moduleB.js',            C: './moduleC.js',        },        mode: mode,        output: {            path: path.resolve(__dirname, 'dist/'),            filename: '[name].js'        },        optimization: {            usedExports: true,            splitChunks: {                cacheGroups: {                    commons: {                        chunks: 'all',                        minChunks: 2,                        maxInitialRequests: 5,                        minSize: 0                    },                    vendor: {                        test: /node_modules/,                        chunks: "initial",                        name: "vendor",                        priority: 10,                        enforce: true                    }                }            }        },        module: { },        plugins: [ ]    }}

运行npm run test脚本命令,结果如下:

Hash: 5d86af7ed04c57cca071Version: webpack 4.28.4Time: 5707msBuilt at: 2019-01-11 19:25:04           Asset       Size  Chunks             Chunk Names            A.js   1.46 KiB       3  [emitted]  A            B.js   1.53 KiB       4  [emitted]  B            C.js   1.54 KiB       5  [emitted]  Ccommons~A~B~C.js  132 bytes       0  [emitted]  commons~A~B~C  commons~A~C.js  238 bytes       1  [emitted]  commons~A~C       vendor.js   69.7 KiB       2  [emitted]  vendorEntrypoint A = vendor.js commons~A~B~C.js commons~A~C.js A.jsEntrypoint B = commons~A~B~C.js B.jsEntrypoint C = vendor.js commons~A~B~C.js commons~A~C.js C.js

如上面的情况,vendor.js文件为69.7kb,如果再引用了其他第三方库,文件会更大。

那么,如何在开发的过程中,压缩lodash呢?

babel-loader & babel-plugin-lodash

可以使用babel-loader在对*.js文件进行解析,然后借助于babel-plugin-lodash插件对引用的lodash进行类似tree shaking的操作,这样就可以去除未使用的lodash代码片段。

安装所需依赖:

yarn add babel-loader  @babel/core @babel/preset-env babel-plugin-lodash --dev

像下面这样修改webpack.config.js配置文件:

...module: {  rules: [      {          test: /\.js$/,          exclude: /node_modules/,          use: {              loader: 'babel-loader',              options: {                  presets: ['@babel/preset-env'],                  plugins: ['lodash']              }          }      }  ]}...

运行npm run test,脚本命令结果如下:

Hash: 30def5521978552cc93dVersion: webpack 4.28.4Time: 3249msBuilt at: 2019-01-11 21:25:23           Asset       Size  Chunks             Chunk Names            A.js   1.46 KiB       3  [emitted]  A            B.js   1.53 KiB       4  [emitted]  B            C.js   1.54 KiB       5  [emitted]  Ccommons~A~B~C.js  132 bytes       0  [emitted]  commons~A~B~C  commons~A~C.js  226 bytes       1  [emitted]  commons~A~C       vendor.js  502 bytes       2  [emitted]  vendorEntrypoint A = vendor.js commons~A~B~C.js commons~A~C.js A.jsEntrypoint B = commons~A~B~C.js B.jsEntrypoint C = vendor.js commons~A~B~C.js commons~A~C.js C.js

vendor.js文件从69.7kb降至502bytes

根据参考文档介绍,使用可以进一步压缩lodash

lodash-webpack-plugin

安装lodash-webpack-plugin依赖:

yarn add lodash-webpack-plugin --dev

修改webpack.config.js配置文件如下:

var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');...plugins: [    new LodashModuleReplacementPlugin,]...

运行npm run test脚本命令,结果如下所示:

Hash: 30def5521978552cc93dVersion: webpack 4.28.4Time: 2481msBuilt at: 2019-01-11 21:07:23           Asset       Size  Chunks             Chunk Names            A.js   1.46 KiB       3  [emitted]  A            B.js   1.53 KiB       4  [emitted]  B            C.js   1.54 KiB       5  [emitted]  Ccommons~A~B~C.js  132 bytes       0  [emitted]  commons~A~B~C  commons~A~C.js  226 bytes       1  [emitted]  commons~A~C       vendor.js  502 bytes       2  [emitted]  vendorEntrypoint A = vendor.js commons~A~B~C.js commons~A~C.js A.jsEntrypoint B = commons~A~B~C.js B.jsEntrypoint C = vendor.js commons~A~B~C.js commons~A~C.js C.js

vendor.js依然是502 bytes,问题不在loadsh-webpack-plugin,它虽然会进一步优化lodash,但是在无法进一步优化的情况下,它也没办法。

一般情况下,不使用lodash-webpack-plugin就可以满足开发的需要,但是文件特别大的情况下,建议还是使用它。

来源:https://segmentfault.com/a/1190000017862101

转载于:https://www.cnblogs.com/lalalagq/p/10259851.html

你可能感兴趣的文章
08-图8 How Long Does It Take
查看>>
二维数组中最大连通子数组
查看>>
java 正则表达式-忽略大小写与多行匹配
查看>>
mac 上亚马逊密钥登录
查看>>
css选择器中:first-child与:first-of-type的区别
查看>>
nopcommerce 二次开发
查看>>
NHibernate入门实例
查看>>
IBM_DS5020磁盘阵列做raid、热备并把盘阵挂在服务器上的步骤
查看>>
svg制作风车旋转
查看>>
《软件工程》课堂作业:返回一个整数数组中最大字数组的和
查看>>
ACM 美素数 (没AC)
查看>>
Sqlserver学习研究
查看>>
VTK图形模型主要对象
查看>>
c# Linq实现 获得某一个路径下所有文件的名(不含扩展名)
查看>>
动静态广播的区别
查看>>
前缀式计算(前缀表达式)
查看>>
UOJ 7 NOI2014 购票
查看>>
java学习之—链表(3)
查看>>
【TDS学习文档5】IBM Directory schema的管理3——attributes
查看>>
Codeforces Round #572 (Div. 2)B
查看>>