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

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

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就可以满足开发的需要,但是文件特别大的情况下,建议还是使用它。

转载地址:http://rtovo.baihongyu.com/

你可能感兴趣的文章
ASP.NET MVC 5 - 给数据模型添加校验器
查看>>
驾校春游烧烤
查看>>
Cassandra 中如何在opscenter中显示Performance Metrics 信息
查看>>
2016
查看>>
动态代理
查看>>
看雪WiFi万能钥匙CTF-第一题 WannaLOL
查看>>
20条Linux命令面试问答实例
查看>>
微软修复 bug 的神奇?
查看>>
身为过来人给Linux初学者的建议
查看>>
python的内存管理机制
查看>>
Springboot+thymeleaf+mybatis 报Error resolving template [index], template might not exist的异常
查看>>
[Python]从零开始学python——Day04 函数
查看>>
MySql 巧用 rand( )获取随机记录
查看>>
vue-router小记
查看>>
在 CentOS7 docker 镜像 上安装 zookeeper-3.4.11 服务
查看>>
ConcurrentHashMap的size方法 jdk 1.8
查看>>
webpack2--tidying up
查看>>
MySQL函数大全 及用法示例
查看>>
oracle 11g dba用户秘密修改其他用户密码
查看>>
爬虫 代理IP
查看>>