问题的起因:

  使用 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样式定义了两次。如图所示。

若想压缩css文件,则推荐使用optimize-css-assets-webpack-plugin插件配合 cssnano.co 使用,配置代码可参考如下
(cssnano需提前通过require('cssnano')引入!)

// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
 var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
new OptimizeCssAssetsPlugin({
cssProcessorOptions: { // 引入cssnano后,可在此处配置css压缩规则
mergeLonghand: false,
discardComments: { removeAll: true }
},
canPrint: true,
}),

在网上搜到的UglifyJsPlugin配置插件在webpack 1.x 中打包css的原因所在,建议大家升级成webpack 2.x 版本再使用UglifyJsPlugin。

总结:webpack打包优化需要不断的去理解插件的作用以及造成的影响,不要滥用插件。

使用Webpack对Css文件压缩处理的思考的更多相关文章

  1. webpack抽取CSS文件与CSSTreeShaking

    webpack抽取CSS文件 CSSTreeShaking 一.webpack抽取CSS文件 抽取CSS文件的插件:mini-css-extract-plugin npm install --save ...

  2. webpack中css文件的代码分割

    module.exports = { output: { filename: '[name].js', chunkFilename: '[name].chunk.js', path: path.res ...

  3. webstorm之js,css文件压缩

    不说废话了,代码压缩是每个网站上线前的必备过程,但由于有时候小的项目或者加急的项目每次都构建一次类似gulp或者grunt等前端部署,实在是大题小做,所以才有了今天这个帖子: 我们会用到yui com ...

  4. 用Grunt进行CSS文件压缩

    假设你的项目的CSS文件全部放在项目目录下名为css的文件夹中,现在将它压缩合并成一个名为main-min.css的文件,放在css-min文件夹下. (1)首先保证机器安装了node.js. (2) ...

  5. 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5

    前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...

  6. 透过现象看webpack处理css文件中图片路径转换的具体过程

    webpack是目前使用比较流行的一个前端模块打包器,前端的任何资源都被当成一个模块来处理,如图片.css文件等等.在基于webpack构建的前端项目中,一般都会配置有关css文件处理的规则,这其中也 ...

  7. webpack(5)webpack处理css文件

    css文件处理-准备工作 (以下项目配置都是基于上一篇webpack(4)的基础上) 在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中. 这里我们就在src目录中创建一个n ...

  8. webpack打包css文件

    1. 安装css-loader 与 style-loader npm install style-loader css-loader --save-dev 2. 在webpack.config.js中 ...

  9. js和css文件压缩

    压缩网址 http://tool.chinaz.com/tools/jscodeconfusion.aspx http://tool.oschina.net/jscompress?type=3 htt ...

随机推荐

  1. Django F()表达式

    Django F()表达式 一个F()对象代表一个模型字段的值或注释列.使用它可以直接引用模型字段的值并执行数据库操作而不用把它们导入到python的内存中. 相反,Django使用F()对象生成一个 ...

  2. 通过修改CR0寄存器绕过SSDT驱动保护

    为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT.IDT等.但这种方法很容易被绕过,我们只要将这些部分修改为可写 ...

  3. GitLab 修改主机名,更换 IP 配置,配置 SMTP

    # find / -name gitlab.yml /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml /var/opt/gitla ...

  4. Kafka消费异常处理

    org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group ...

  5. 深入聊聊Java多线程

    一.背景 在没有学习Java多线程以前,总觉得多线程是个很神秘的东西,只有那些大神才能驾驭,新年假期没事就来学习和了解一下Java的多线程,本篇博客我们就来从头说一下多线程到底是怎么回事. 二.概述 ...

  6. docker网络之bridge

    建议阅读本文章之前了解一下文章,本文不作bridge的基本介绍 https://blog.csdn.net/u014027051/article/details/53908878/ http://wi ...

  7. MVC源码分析 - Action/Result 过滤器执行时机

    前面 的篇章, 解析了Action方法的查找, 以及 Authorize, Action, Result, Error 过滤器的加载时机. 也花了两篇去看授权和错误过滤器的使用. 但是对于 Actio ...

  8. [Python学习笔记-006] 使用stomp.py校验JMS selector的正确性

    了解Jenkins的人都知道,JMS selector是基于SQL92语法实现的,本文将介绍使用stomp.py和ActiveMQ来校验JMS selector的正确性. Q: 什么是stomp.py ...

  9. SpringCloud入门之eclipse新建maven子项目和聚合项目

    一.new maven project :  next 二.勾选 create a simple project  :  next 三.Group Id:项目的包路径 如com.test,之后创建的C ...

  10. Python模块:time模块详解(转)

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...