使用Webpack对Css文件压缩处理的思考
问题的起因:
使用 bulma.css ,通过webpack打包后样式出错,查看压缩代码,发现代码从css的 long hand 属性被压缩为 short hand(PS: 什么是long hand & short hand,请查看此文:http://www.hongkiat.com/blog/css-shorthand-longhand-notations/)。
解决过程:
经过一番追查判断(搜 + 思),最终发现问题出在webpack.prod.conf.js(使用vue-cli自动搭建的weppack环境)里, 使用了UglifyJsPlugin 插件进行代码压缩,UglifyJsPlugin用于对 js 代码进行压缩,可是在 webpack 1.x 版本里,使用 UglifyJsPlugin 插件不仅会压缩 js 代码,同样也会压缩css代码,这就造成了一些问题:可能在代码压缩过程中,由于使用 UglifyJsPlugin压缩 css 代码,可能会发生属性合并的问题,比如上述 long hand & short hand问题。在我的问题中,主要是由于bulma的 select 样式中 padding-right 值定义了两次,后一次值会对前一次进行覆盖(想想css的名称“层叠样式表”),当在npm run build 打包后部署文件时就会出现样式错误的现象,查看压缩文件,发现padding-left、padding-right、padding-top、padding-bottom属性已合并为padding,然而padding属性合成值并不是我们希望的,由于bulma的 select样式定义了两次。如图所示。
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCssAssetsPlugin({
cssProcessorOptions: { // 引入cssnano后,可在此处配置css压缩规则
mergeLonghand: false,
discardComments: { removeAll: true }
},
canPrint: true,
}),
在网上搜到的UglifyJsPlugin配置插件在webpack 1.x 中打包css的原因所在,建议大家升级成webpack 2.x 版本再使用UglifyJsPlugin。

总结:webpack打包优化需要不断的去理解插件的作用以及造成的影响,不要滥用插件。
使用Webpack对Css文件压缩处理的思考的更多相关文章
- webpack抽取CSS文件与CSSTreeShaking
webpack抽取CSS文件 CSSTreeShaking 一.webpack抽取CSS文件 抽取CSS文件的插件:mini-css-extract-plugin npm install --save ...
- webpack中css文件的代码分割
module.exports = { output: { filename: '[name].js', chunkFilename: '[name].chunk.js', path: path.res ...
- webstorm之js,css文件压缩
不说废话了,代码压缩是每个网站上线前的必备过程,但由于有时候小的项目或者加急的项目每次都构建一次类似gulp或者grunt等前端部署,实在是大题小做,所以才有了今天这个帖子: 我们会用到yui com ...
- 用Grunt进行CSS文件压缩
假设你的项目的CSS文件全部放在项目目录下名为css的文件夹中,现在将它压缩合并成一个名为main-min.css的文件,放在css-min文件夹下. (1)首先保证机器安装了node.js. (2) ...
- 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5
前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...
- 透过现象看webpack处理css文件中图片路径转换的具体过程
webpack是目前使用比较流行的一个前端模块打包器,前端的任何资源都被当成一个模块来处理,如图片.css文件等等.在基于webpack构建的前端项目中,一般都会配置有关css文件处理的规则,这其中也 ...
- webpack(5)webpack处理css文件
css文件处理-准备工作 (以下项目配置都是基于上一篇webpack(4)的基础上) 在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中. 这里我们就在src目录中创建一个n ...
- webpack打包css文件
1. 安装css-loader 与 style-loader npm install style-loader css-loader --save-dev 2. 在webpack.config.js中 ...
- js和css文件压缩
压缩网址 http://tool.chinaz.com/tools/jscodeconfusion.aspx http://tool.oschina.net/jscompress?type=3 htt ...
随机推荐
- SQL Server性能优化(6)查询语句建议
1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TO ...
- OpenShift Redhat 搭建NodeJS环境
https://openshift.redhat.com/ OpenShift 是 redhat 公司推出的一个 PaaS 云计算应用平台,开发者可在上面构建.测试.部署和运行应用程序,它支持 Jav ...
- Node.js 安装及环境配置之 Windows 篇
一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v8.9.4-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 Node ...
- Eclipse juno 中安装 JBoss Tools,集成Hibernate
在Eclipse中集成Hibernate工具可以帮助开发者根据数据库生成映射文件.注释代码以及反向工程. Hibernate Tools作为JBoss Tools的核心组件,已经被捆绑在JBoss T ...
- C#数据仓储类
https://ninesky.codeplex.com/SourceControl/latest /*============================== 版本:v0.1 创建:2016.2 ...
- 二叉树的递归,非递归遍历(java)
import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private ...
- 学了近一个月的java web 感想
对于每天学习的新知识进行一定的总结,是有必要的. 之前我学的每一门知识,我都没有怎么总结自己的问题,也没有怎么去想想该怎样才能学的更好,把知识掌握的更牢固.从现在开始呢,我会每半个月,或每一个月总结总 ...
- Python中的单例模式的几种实现方式的及优化
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- AutoMapper之集合和数组映射
9.集合和数组映射 在项目中,集合和数组使用的很多的,继续下来就讲讲他们的映射,很简单. /// <summary> /// 源对象 /// </summary> public ...
- Hibernate Tools for Eclipse的使用
Hibernate Tools的官方网站:http://hibernate.org/tools/Step1.安装好Hibernate Tools,建立一个Dynamic web project,工程名 ...