认识DLL库
-
DLL是什么
- DLL全程是动态链接库(Dynamic Link Librar),是为软件在Windows中实现共享函数库的一种实现方式
- 那么webpack中也有内置DLL的功能,它指的是我们可以将可以共享,并且不经常改变的代码,抽取成一个共享的库;
- 这个库在之后编译的过程中,会被引入到其他巧目的代码中
-
DLL库的使用分为两步
- 第一步:打包一个DLL库;
- 第二步:项目中引入DLL库
-
注意:在升级到webpack4之后,已经不推荐使用,react和vue脚手架都移除了DLL库(下面有vue作者的回复)
- DLL选项将被删除。Webpack4已经可以提供足够好的性能,在Vue CLli中维护DLL模式的成本不再合理。
- DLL选项将被删除。Webpack4已经可以提供足够好的性能,在Vue CLli中维护DLL模式的成本不再合理。
Terser
-
什么是Terser
- Terser是一个javascript的解释(Parser)、Mangler(绞肉机)/Compressor(压缩机)的工具集
- 也就是说,terser可以帮助我们压缩,丑化我们的代码,让我们的bundle体积更小
- 因为terser是一个独立的工具,所以可以单独安装它
-
通过
npm install terser安装依赖后,直接执行 terser 命令语句npx terser ./src/message.js -o ./message.min.js,默认情况下一般都是使用默认配置项- 配置项举例compress options
- arrows — 对象里的箭头函数函数体只有一句
- arguments — arguments 参数进行转换
- dead_code — 删除不可达的代码 (remove unreachable code)
- 配置项举例mangle options
- toplevel — 顶层作用域要不要丑化
- keep_classnames — 类名保留
- keep_fnames — 保留函数名
- 配置项举例compress options
-
在webpack使用(terser-webpack-plugin)
-
webpack v5 开箱即带有最新版本的
terser-webpack-plugin。如果你使用的是 webpack v5 或更高版本,同时希望自定义配置,那么仍需要安装terser-webpack-plugin。如果使用 webpack v4,则必须安装terser-webpack-pluginv4 的版本。module.exports = { // 其它配置省略 mode: 'production', optimization: { minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { compress: { arguments: true, dead_code: true, }, toplevel: true, keep_classnames: true, keep_fnames: true, }, }), ], }, }; -
默认情况下我们一般不去单独设置,更多options可以参看官方文档
-
CSS压缩
npm install css-minimizer-webpack-plugin -Dconst CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); module.exports = { // 其它配置省略 mode: 'production', optimization: { minimize: true, minimizer: [ new CssMinimizerPlugin(), ], }, };
scope hoisting
-
什么是Scope Hoisting呢?
- Scope Hoisting从webpack3开始增加的一个新功能
- 功能是对作用域进行提升,并且让webpack打包后的代码更小、运行更快
-
默认情况下webpack打包会有很多的函数作用域,包括一些(比如最外层的)IIFE
- 无论是从最开始的代码运行,还是加载一个模块,都需要执行一系列的函数
- Scope Hoisting可以将函数合并到一个模块中来运行
-
使用Scope Hoisting非常的简单,webpack已经内置了对应的模块
-
在production模式下,默认这个模块就会启用
-
在development模式下,我们需要自己来打开该模块
const webpack = require('webpack'); module.exports = { // 其它配置省略, mode:"development", plugins:[ new webpack.optimize.ModuleConcatenationPlugin(); ] }
-
示例代码
https://gitee.com/weiLZ598/webpack-study.git