问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webpack完全指南:代码压缩

发布网友 发布时间:2024-10-01 17:32

我来回答

1个回答

热心网友 时间:2024-10-09 09:14

前端构建编译代码时,压缩代码也是很重要的,压缩后的代码体积减小,传输速度快,从而提升网页加速速度和减少网络传输流量。除此之外,还具有混淆源码的作用,由于压缩后的代码可读性非常差,就算别人下载到了网页的代码,也大大增加了代码分析和改造的难度。

压缩JS

目前最成熟的JavaScript代码压缩工具是UglifyJS,它会分析JavaScript代码语法树,理解代码含义,从而能做到诸如去掉无效代码、去掉日志输出代码、缩短变量名等优化。

在Webpackv4中,uglifyjs-webpack-plugin是被默认集成在生产模式中的。所以,默认打包出的JS文件就是压缩好的,如果你需要更多的自定义也可以对uglifyjs-webpack-plugin进行配置。

首先,安装uglifyjs-webpack-plugin:

npminstalluglifyjs-webpack-plugin--save-dev

然后,添加到你的webpack配置中:

constUglifyJsPlugin=require("uglifyjs-webpack-plugin");module.exports={optimization:{minimizer:[newUglifyJsPlugin()],},};

uglifyjs-webpack-plugin的可配置项:

test:测试匹配的文件,默认值:/\.js(\?.*)?$/i

module.exports={optimization:{minimizer:[newUglifyJsPlugin({test:/\.js(\?.*)?$/i,}),],},};

include:要被处理的文件。

exclude:不被处理的文件。

chunkFilter:判断哪些chunk可以被压缩(默认所有的chunk都会被压缩)。返回值为true则会被压缩,false则不会被压缩。

module.exports={optimization:{minimizer:[newUglifyJsPlugin({chunkFilter:(chunk)=>{//`vendor`块不压缩if(chunk.name==="vendor"){returnfalse;}returntrue;},}),],},};

cache:启动文件缓存,默认为false,默认的缓存目录路径:node_modules/.cache/uglifyjs-webpack-plugin。

parallel:使用多进程并行运行以提高构建速度,默认为false,推荐开启。

sourceMap:使用源映射将错误信息位置映射到模块(这将会减慢编译速度),默认为false。

uglifyOptions:UglifyJS压缩配置选项。

压缩CSS

CSS代码也可以像JS那样被压缩,目前比较成熟可靠的CSS压缩工具是cssnano,cssnano是能理解CSS代码的含义,而不仅仅是删掉空格,例如:

对于webpackv5或更高版本,官方推荐使用CssMinimizerWebpackPlugin,该插件是使用cssnano优化和压缩CSS,支持缓存和并发模式下运行。

首先,我们需要安装css-minimizer-webpack-plugin:

npminstallcss-minimizer-webpack-plugin--save-dev

接着在webpack配置中加入该插件:

constCssMinimizerPlugin=require("css-minimizer-webpack-plugin");module.exports={//...optimization:{minimizer:[//在webpack@5中,你可以使用`...`语法来扩展现有的minimizer(即`terser-webpack-plugin`),将下一行取消注释`...`,newCssMinimizerPlugin(),],},};压缩HTML

HtmlWebpackPlugin插件除了可以帮助我们简化HTML文件的创建,也可以压缩HTML文件。

首先,需要先安装HtmlWebpackPlugin插件:

npminstall--save-devhtml-webpack-plugin

添加到webpack配置文件中:

//webpack.config.jsconstHtmlWebpackPlugin=require("html-webpack-plugin");module.exports={plugins:[newHtmlWebpackPlugin()],};

如果不添加任何配置的话,会生成一个默认index.html文件,并自动注入所有的chunk和压缩。

也可以通过自定义配置参数,以下几个是常见的参数:

template:模板的路径,默认会去寻找src/index.ejs是否存在。

filename:输出文件的名称,默认为index.html。

inject:是否将资源注入到模版中,默认为true。

minify:压缩参数。在生产模式下(production),默认为true;否则,默认为false。

如果minify为true,生成的HTML将使用html-minifier-terser和以下选项进行压缩:

{collapseWhitespace:true,keepClosingSlash:true,removeComments:true,removeRedundantAttributes:true,removeScriptTypeAttributes:true,removeStyleLinkTypeAttributes:true,useShortDoctype:true}

热心网友 时间:2024-10-09 09:17

前端构建编译代码时,压缩代码也是很重要的,压缩后的代码体积减小,传输速度快,从而提升网页加速速度和减少网络传输流量。除此之外,还具有混淆源码的作用,由于压缩后的代码可读性非常差,就算别人下载到了网页的代码,也大大增加了代码分析和改造的难度。

压缩JS

目前最成熟的JavaScript代码压缩工具是UglifyJS,它会分析JavaScript代码语法树,理解代码含义,从而能做到诸如去掉无效代码、去掉日志输出代码、缩短变量名等优化。

在Webpackv4中,uglifyjs-webpack-plugin是被默认集成在生产模式中的。所以,默认打包出的JS文件就是压缩好的,如果你需要更多的自定义也可以对uglifyjs-webpack-plugin进行配置。

首先,安装uglifyjs-webpack-plugin:

npminstalluglifyjs-webpack-plugin--save-dev

然后,添加到你的webpack配置中:

constUglifyJsPlugin=require("uglifyjs-webpack-plugin");module.exports={optimization:{minimizer:[newUglifyJsPlugin()],},};

uglifyjs-webpack-plugin的可配置项:

test:测试匹配的文件,默认值:/\.js(\?.*)?$/i

module.exports={optimization:{minimizer:[newUglifyJsPlugin({test:/\.js(\?.*)?$/i,}),],},};

include:要被处理的文件。

exclude:不被处理的文件。

chunkFilter:判断哪些chunk可以被压缩(默认所有的chunk都会被压缩)。返回值为true则会被压缩,false则不会被压缩。

module.exports={optimization:{minimizer:[newUglifyJsPlugin({chunkFilter:(chunk)=>{//`vendor`块不压缩if(chunk.name==="vendor"){returnfalse;}returntrue;},}),],},};

cache:启动文件缓存,默认为false,默认的缓存目录路径:node_modules/.cache/uglifyjs-webpack-plugin。

parallel:使用多进程并行运行以提高构建速度,默认为false,推荐开启。

sourceMap:使用源映射将错误信息位置映射到模块(这将会减慢编译速度),默认为false。

uglifyOptions:UglifyJS压缩配置选项。

压缩CSS

CSS代码也可以像JS那样被压缩,目前比较成熟可靠的CSS压缩工具是cssnano,cssnano是能理解CSS代码的含义,而不仅仅是删掉空格,例如:

对于webpackv5或更高版本,官方推荐使用CssMinimizerWebpackPlugin,该插件是使用cssnano优化和压缩CSS,支持缓存和并发模式下运行。

首先,我们需要安装css-minimizer-webpack-plugin:

npminstallcss-minimizer-webpack-plugin--save-dev

接着在webpack配置中加入该插件:

constCssMinimizerPlugin=require("css-minimizer-webpack-plugin");module.exports={//...optimization:{minimizer:[//在webpack@5中,你可以使用`...`语法来扩展现有的minimizer(即`terser-webpack-plugin`),将下一行取消注释`...`,newCssMinimizerPlugin(),],},};压缩HTML

HtmlWebpackPlugin插件除了可以帮助我们简化HTML文件的创建,也可以压缩HTML文件。

首先,需要先安装HtmlWebpackPlugin插件:

npminstall--save-devhtml-webpack-plugin

添加到webpack配置文件中:

//webpack.config.jsconstHtmlWebpackPlugin=require("html-webpack-plugin");module.exports={plugins:[newHtmlWebpackPlugin()],};

如果不添加任何配置的话,会生成一个默认index.html文件,并自动注入所有的chunk和压缩。

也可以通过自定义配置参数,以下几个是常见的参数:

template:模板的路径,默认会去寻找src/index.ejs是否存在。

filename:输出文件的名称,默认为index.html。

inject:是否将资源注入到模版中,默认为true。

minify:压缩参数。在生产模式下(production),默认为true;否则,默认为false。

如果minify为true,生成的HTML将使用html-minifier-terser和以下选项进行压缩:

{collapseWhitespace:true,keepClosingSlash:true,removeComments:true,removeRedundantAttributes:true,removeScriptTypeAttributes:true,removeStyleLinkTypeAttributes:true,useShortDoctype:true}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 怀孕是否可以洗牙齿 自适应巡航开启后显示条件不满足? 自适应巡航系统故障是什么? 兰州安宁45中学怎么样 word的文字环绕嵌入怎么用不了word环绕文字嵌入型 车祸撞死人后和家属私了要坐牢吗 出了车祸,撞死一个人,撞人的司机没有违反交规。然后被对方家属打的半... 职业生涯决策常用的方法有哪些 生涯规划四个测评是什么? 男子闯道当众辱骂协警,叫嚣“戴的烂表,让我爸撞烂你的车”,什么... 新买的OPPOA5相册里的示例图片为什么是2017年9月的? 精液少怎么回事 精子量少吃什么能补回来 精子量少吃什么食物好 hm是什么意思汉语? 手机UC浏览器软件小说全搜的更新提示突然没有了怎么恢复啊... 命运无常,真可以逆天改命吗? 无印良品官旗是真的无印良品吗? 福州万顺水岸滨江带装修吗? 为什么苹果帐户会显示密码错误?? 孕妇牙齿痛可以洗牙吗 孕期口腔护理的常见误区有哪些? 解决webpack打包报错UglifyJs Unexpected token: punc (,)的问题... 国庆陕西周边游三四天去哪里,十一国庆假期西安周边旅游 2023陕西自然博物馆游玩攻略 登封遛娃好去处_登封带娃好玩的地方 uglifyjs-webpack-plugin 中文文档 中国股指期货都有什么 2023黑龙江考研成绩查询时间 黑龙江2023年硕士研究生招考初试成绩21日公... 小米小钢炮蓝牙音响2连接手机一切正常 连接台式电脑也能播放电脑... 最近您如果接到0510-96600电话,千万不要挂,一定要接哦! 在无锡办健康证地点?几点到几点可以办理? 费用多少? 我星期五办理..什 ... qq分组的数字是什么意思 QQA分组是什么意思? 没有打蛋器怎么将蛋清打发(想要在家做小蛋糕,没有打蛋器怎么办?)_百 ... qq单独分组是什么意思? Ivy Bridge处理器的HD4000核显能抗衡低端独立显卡吗? hd4000核显相当于什么水平的独立显卡? HD Graphics4000相当于什么级别的独立显卡? 搅拌器可以打发蛋清吗