webpack的postcss的基本应用
- PostCss是什么?
- PostCSS在webpack中的基本应用
一、PostCss是什么?
如果有深入学习PostCss需求的话可以参考大漠的资料:https://www.w3cplus.com/blog/tags/516.html
大概来说postcss是一个用来处理css的系统程序,它不是css语处理器,也不是css后处理后处理器,也不是新的语法,也不是优化工具。postcss本身只做两件事,将css转换成css抽象语法树,可以简单的理解为将css转换成js;postcss做的第二件事就是调用插件来处理抽象语法树,通过插件实现对css的处理。
这篇博客只是postcss的基本应用,并不对postcss的实现原理以及插件开发做任何解析。通常现在使用postcss的处理css前缀的插件有postcss-cssnext和autoprefixer,postcss-cssnext包含了autoprefixer的添加前缀功能,还具备处理css未来的语法特性;比较常用的插件还有cssnano用来压缩css代码。
二、PostCss在webpack中的基本应用
工作区间文件结构
//工作区间
src//文件夹
demo.less
index.js
index.html
package.json
webpack.config.js
需要的模块:
//除了必备webpack webpack-cli打包工具必备的插件和处理模块
npm install less less-loader --save-dev //处理less
npm install css-loader postcss postcss-loader cssnano postcss-cssnext autoprefixer --save-dev//集成postcss
npm mini-css-extract-plugin --save-dev//生成css文件
webpack.config.js配置文件:关键在于配置postcss,要将它放在less-loader和css-loader中间。
var path = require("path");
const PurifyCSSPlugin = require('purifycss-webpack');
var MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry: {
index: './src/index.js',
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-[hash:5].bundle.js"
},
module: {
rules: [
{
test: /\.less$/,
use: [
{ loader: MiniCssExtractPlugin.loader },
{ loader: 'css-loader' },
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
plugins: [
// require('autoprefixer')(),//添加前缀
require('postcss-cssnext')(),//添加前缀 转换css未来语法
require('cssnano')({
preset: 'default'
}),
]
}
},
{ loader: 'less-loader' }],
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name]-[hash:5].css",
})
]
}
其他文件的代码:
*{
margin: 0;
padding: 0;
}
body{
background-color: #f00;
.wrapper{
position: absolute;
width: 300px;
height: 300px;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border: 1px solid #3addff;
border-radius: 10px;
background-color: #3acfaa;
display: flex;
justify-content: center;
align-items: center;
.box{
width:160px;
height: 160px;
background: #92d000;
border-radius: 10px;
line-height: 160px;
span{
display: inline-block;
width: 100%;
color: #3acfaa;
font-size: 32px;
text-align: center;
font-weight: 600;
text-shadow: -3px -3px 1px #000,1px 1px 3px #fff;
}
}
}
}
less代码
import './demo.less';
js代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!--注意生成的css文件名-->
<link rel="stylesheet" href="./dist/index-5fde8.css">
</head>
<body>
<div class="wrapper">
<div class="box">
<span>SPAN</span>
</div>
</div>
</body>
</html>
HTML代码
最后注明以下关于postcss-cssnext的未来语法处理在测试代码中没有相关的语法处理,用下面的代码来说明一下:
:root{
--color:red;
}
a{
color:var(--color);
}
上面这些代码在浏览器中还不能直接被解析,可以通过postcss-cssnext转换。
注意,如果使用postcss并使用cssnano优化压缩css代码的话,在plugins中就不能配置PurifyCSSPlugin来做css tree shaking操作,因为PurifyCSSPlugin会导致原本被cssnano压缩的代码会有恢复到了非压缩状态,这两个插件是冲突的。
webpack的postcss的基本应用的更多相关文章
- webpack之postcss集成
项目 为了 兼容各个浏览器,需要加各种 c3前缀,如果手动的加肯定 相对比较麻烦,但是现在有webpack,gulp之类的 工具可以自动给我们加上,可以说效率上加速不少.如果 配置中 做个happyp ...
- 深入浅出的webpack构建工具---PostCss(五)
一:PostCss是什么? PostCss是一个样式处理工具,它通过自定义的插件和工具生态体系来重新定义css.它鼓励开发者使用规范的css原生语法编写代码,然后配置编译器转换需要兼容的浏览器版本, ...
- webpack 实现的多入口项目脚手架
简介 基于 webpack2 实现的多入口项目脚手架,主要使用 extract-text-webpack-plugin 实现 js .css 公共代码提取,html-webpack-plugin 实现 ...
- webpack的css压缩不兼容IOS8问题探索
webpack使用postcss的autoprefixer插件,并在压缩css时使用了cssnano,处理不当的情况下会导致压缩css后,部分兼容前缀(比如-webkit-)被删除的问题. postc ...
- npm install 时--save-dev和--save的区别
package.json中两个字段含义简介 一直在使用npm包管理器,对于npm install module --save-dev 和 npm install module --save这两个的区别 ...
- 网易云复盘:云计算前端这一年(AngularJS粉慎入)
本文由 网易云发布. 作者:赵雨森 2017年的前端已然没有剧烈的变动,但发展势头仍然不减.语言.标准.框架和库逐渐稳定和完善,各团队再也不用花大把精力放在造轮子上,而更多的是去积累所需的组件库.开 ...
- 解决vue移动端适配问题
1,先看看网上关于移动端适配讲解 再聊移动端页面适配,rem和vw适配方案! 基础点:rem相对根节点字体的大小.所以不用px; 根字体:字体的大小px; px:你就当成cm(厘米)这样的东西吧: 基 ...
- cssnext下一代的css
前端技术更新迭代的速度令人咂舌,互联网+的风头刚起那几年,前端技术大多还停留在jquery阶段,按需加载还停留在seajs和requirejs的阶段,css3和H5也不过才崭露头角,但经过几年的飞速发 ...
- 一位90后程序员的自述:如何从年薪3w到30w!
初入职场之时,大多数人都应该考虑过这样的一个问题,如何找到一种实用,简化web流程的方法,在工作之中能有所提升和突破. 学好哪些?基础必须精通! 九层之塔,起于垒土;千里之行,始于足下.入门之前,这些 ...
随机推荐
- js中bind解析
一.arguments的含义 // arguments 是一个对应于传递给函数的参数的类数组对象 function a(){ console.log(arguments); } a(); // Arg ...
- 如何打开DOS控制台
A:xp下如何打开DOS控制台? a:开始--程序--附件--命令提示符 b:开始--运行--cmd--回车 c:win+r--cmd--回车 B:win7下如何打开DOS控制台? a:开始--所有程 ...
- [Python]正则匹配字符串 | 蒲公英二维码图片url
代码示例: import re def Find(string): # findall() 查找匹配正则表达式的字符串 url = re.findall('http[s]?://(?:[a-zA-Z] ...
- 阿里云轻应用服务器配置Ubuntu的JDK、Tmocat、Mysql和Redis
1.与服务器建立连接(达到效果:XShell和Xftp均可连接到服务器) 阿里云管理控制台提供的三种建立服务器连接方式: 使用浏览器发起安全连接(推荐) 客户端使用密钥进行连接 客户端使用账号密码 ...
- 问题root@localhost's password:localhost:permission denied,please try again
转载:https://www.cnblogs.com/hmy-blog/p/6500909.html 经过试验,上述方法在我的电脑中没有成功. 1.安装 open ssh:sudo apt-get i ...
- HDFS的基础与操作
一 HDFS概念 1.1 概念 HDFS,它是一个文件系统,全称:Hadoop Distributed File System,用于存储文件通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起 ...
- matlab中如何给一个矩阵中的某几个特定位置赋值
用sub2ind >> a=zeros(5); i = [2;3;4]; j = [1;4;2]; >> a(sub2ind(size(a), i, j))=1 a = 0 0 ...
- Linux系统管理_主题02 :管好文件(1)_2.1 切换、创建和删除目录_cd_mkdir_rmdir
用法:cd [目录路径] 变换工作目录至制定目录路径,若[目录路径]参数省略则变换至使用者的 家目录, 其中[目录路径]可为绝对路径或相对路径 另外 "~" 在 Bash 中表示当 ...
- eclipse JavaEE spring,spring mvc,mybits-SSM老年人搭建记录
老求了,好多东西记不住了,再不记以后怕是记不住了. eclipse JAVAEE for web Version: Mars.2 Release (4.5.2) tomcat 7.0.29 sprin ...
- Java内部类(1):概述
> 将一个类的定义放在另一个类的定义内部,这就是内部类. > 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内 ...