当前位置:网站首页>压缩 js 代码就用 terser
压缩 js 代码就用 terser
2022-07-06 18:40:00 【一颗冰淇淋】
webapck
中提供了压缩 js 代码的方式,可以移除无用代码、替换变量名等,减少编译后文件体积,提升加载速度。
不同mode
在 webpack
配置文件 webpack.config.js
中通过将 mode
设置为 development
或者 production
,会对代码进行不同的处理。
可以发现,production
模式下编译的文件,文件及变量名被修改、空格换行被去除,即使自己没有进行配置,webpack 也会在我们设置 production
的模式时默认添加一些属性,比如这里js代码压缩用到的就是 TerserPlugin
。
terser
TerserPlugin
处理代码依赖的是 terser
这个工具, terser
是可以直接安装并独立使用的,使用的时候有非常多的配置可以自行定义,具体可参考 官方文档
其中属于 compress options
- arrows — 对象里的箭头函数函数体只有一句
- arguments — arguments 参数进行转换
- dead_code — 删除不可达的代码 (remove unreachable code)
以下属于 mangle options
- toplevel — 顶层作用域要不要丑化
- keep_classnames — 类名保留
- keep_fnames — 保留函数名
通过 npm install terser
安装依赖后,直接执行 terser 命令语句 npx terser ./src/index.js -o ./terser/default.js
,这里没有进行配置,所以使用的是默认处理方式,只移除了换行。
自定义js代码的编译方式,npx terser ./src/index.js -o terser/index.min.js -c arguments,arrows=true -m toplevel,keep_classnames,keep_fnames
以上配置表示
- 函数中使用到 arguments 时,转成形参
- 箭头函数体只有一句时,去除 return
- 丑化顶层作用域的变量,比如将变量名 message 变为 o
- 保留类名
- 保留函数名
可以看到,编译后的代码去除了空格和换行,以及一些其它指定的处理
为了更方便阅读,将编译后的代码格式化
TerserPlugin
在项目中,有很多 js 文件需要进行压缩处理,自己一个个命令去指定编译规则的方式会过于麻烦,通过 TerserPlugin 统一配置能够解决这个问题。
通过 npm install terser-webpack-plugin --save-dev
安装依赖后,在 webpack.config.js
文件中定义对应的配置,更多配置可参考 官方文档
const TerserPlugin = require('terser-webpack-plugin');
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,
},
}),
],
},
};
编译后文件的js代码被压缩到了一行,格式化之后可以看到对应的处理
总结
terser
是一个工具,有着压缩、转换处理 js 代码等功能,通过命令行可以直接对 js 文件进行编译。
但在项目中,直接使用 terser
过于繁琐,所以借助 terser-webpack-plugin
统一编译,当 mode
为 production
时,有默认的配置,也可以自行定义处理规则。
以上就是 terser 和 TerserPlugin 的介绍, 更多有关 webpack
的内容可以参考我其它的博文,持续更新中~
边栏推荐
- A new path for enterprise mid Platform Construction -- low code platform
- The empirical asset pricing package (EAP) can be installed through pypi
- The foreground downloads network pictures without background processing
- CISP-PTE实操练习讲解(二)
- The boss is quarantined
- MySQL execution process and sequence
- STM32项目 -- 选题分享(部分)
- Command injection of cisp-pte
- [paper reading | deep reading] rolne: improving the quality of network embedding with structural role proximity
- STM32F4---PWM输出
猜你喜欢
【论文阅读|深读】 GraphSAGE:Inductive Representation Learning on Large Graphs
Web3对法律的需求
传感器:土壤湿度传感器(XH-M214)介绍及stm32驱动代码
如何从0到1构建32Core树莓派集群
机器人队伍学习方法,实现8.8倍的人力回报
Correct use of BigDecimal
建議收藏!!Flutter狀態管理插件哪家强?請看島上碼農的排行榜!
Introduction to FLIR blackfly s industrial camera
Decryption function calculates "task state and lifecycle management" of asynchronous task capability
Flir Blackfly S 工业相机:配置多个摄像头进行同步拍摄
随机推荐
Chang'an chain learning notes - certificate model of certificate research
Analyze "C language" [advanced] paid knowledge [i]
Sensor: DS1302 clock chip and driver code
ZABBIX 5.0: automatically monitor Alibaba cloud RDS through LLD
【论文阅读|深读】RolNE: Improving the Quality of Network Embedding with Structural Role Proximity
The empirical asset pricing package (EAP) can be installed through pypi
企业中台建设新路径——低代码平台
纽约大学 CITIES 研究中心招聘理学硕士和博士后
Flir Blackfly S 工业相机:自动曝光配置及代码
Freeswitch dials extension number source code tracking
Threadlocalutils (tool class IV)
机器人队伍学习方法,实现8.8倍的人力回报
Correct use of BigDecimal
处理streamlit库上传的图片文件
【论文阅读|深读】ANRL: Attributed Network Representation Learning via Deep Neural Networks
将截断字符串或二进制数据
go swagger使用
Errors made in the development of merging the quantity of data in the set according to attributes
ROS learning (XX) robot slam function package -- installation and testing of rgbdslam
1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效