不知不覺地春節要來臨了,今天已是放假的次日,想一想回老家以後全部的時間就不是本身的了,要陪孩子玩,走親戚等等,我仍是趁着在鄭州的這兩天,把幾天後春節要發佈的文章給提早整整。在此,提早祝你們春節快樂!!javascript
前面我已寫了6篇相關的Webpack方面的技術知識點,今天我主要分享有關PostCSS方面的技術,PostCSS嚴格來講不是一款c s s預處理器,而是一個用 JavaScript 工具和插件轉換 CSS 代碼的工具。它的工做模式是接收樣式源代碼並交由編譯插件處理,最後輸出CSS。經過PostCSS包含的不少功能強大的插件,可讓咱們使用更新的CSS特性,保證更好的瀏覽器兼容性。css
使用npm 進行安裝postcss-loader,postcss-loader是鏈接PostCSS和Webpack。安裝命令行以下:html
npm install postcss-loader --save-dev
複製代碼
webpack.config.js配置以下:java
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
context: path.join(__dirname, './src'),
entry: {
index: './index.js'
},
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
mode: 'development',
module: {
rules: [
{
test: /\.css$/i,
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: './dist'
},
}, 'css-loader'], // "css-loader" 將 CSS 轉化成 CommonJS 模塊
exclude: /node_modules/
},
{
test: /\.scss$/i,
use: ['style-loader',
{
loader: 'css-loader',
options: {
sourceMap: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
},
'postcss-loader' //配置postcss-loader
],
exclude: /node_modules/
},
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
cacheDirectory: true,
presets: [
[
'env', {
modules: false
}
]
]
}
}
}
],
},
plugins: [new MiniCssExtractPlugin({
filename: '[name].css',
chunkFilename: '[id].css'
})],
}
複製代碼
postcss-loader能夠結合css-loader使用,也可單獨使用,就是單獨使用也能夠達到須要的效果,可是單獨使用的時候不建議用css中的@import語法,不然會產生冗餘代碼。官方推薦是二者結合着使用,不要單獨使用。node
postCSS必須有一個單獨的配置文件,因此還須要在項目根目錄下配置一個postcss.config.js, 這個能夠結合着自動添加前綴插件Autoprefixer使用,Autoprefixer 自動獲取瀏覽器的流行度和可以支持的屬性,並根據這些數據幫你自動爲 CSS 規則添加前綴。這是postCss最普遍的一個應用場景。首先安裝Autoprefixer,安裝命令代碼以下:android
npm install autoprefixer --save-dev
複製代碼
在postcss.config.js中添加autoprefixer,配置代碼以下:webpack
const autoprefixer = require('autoprefixer')
module.exports = {
parser: 'sugarss',
plugins: {
'autoprefixer': {
flex: true,
browsers: [
'> 1%',
'last 3 versions',
'android 4.2',
'ie 8'
]
}
}
}
複製代碼
咱們能夠在autoprefixer中添加須要支持的特性(如grid)以及兼容哪些瀏覽器(browsers)。配置好以後,咱們就可使用一些較新的CSS特性。如:web
.main{
dislay: grid;
}
複製代碼
因爲配置中制定grid爲true,也就是grid特性添加ie前綴,通過編譯後變成:npm
.main{
display: -ms-grid;
dislay: grid;
}
複製代碼
postcss能夠與cssnext 結合使用,這樣能夠在應用中使用最新的CSS的語法特性。 首頁使用npm 命令行安裝:瀏覽器
npm install postcss-cssnext --save-dev
複製代碼
而後在posts.config.js中添加相應的配置,代碼以下:
const postcssCssnext = require('postcss-cssnext')
module.exports = {
parser: 'sugarss',
plugins: {
'postcssCssnext': {
browsers: [
'> 1%',
'last 2 versions'
]
}
}
}
複製代碼
指定好須要支持的瀏覽器以後,咱們就能夠順暢地使用CSSNext的特性了。PostCSS會幫咱們把CSSNext的語法翻譯爲瀏覽器能接受的屬性和形式。好比下面的代碼:
/** main.css **/
:root {
--highligtColor: hwb(190, 35%, 20%);
}
body {
color: var(--highlightColor)
}
複製代碼
打包後編譯的效果以下:
body {
color: rgb(89, 185, 204)
}
複製代碼
stylelint是一個css代碼質量檢測的工具,咱們能夠爲其添加各類規則,來統一項目的代碼風格,來確保代碼質量高。 首頁先用命令行安裝stylelint代碼以下:
npm install stylelint --save-dev
複製代碼
postcss.config.js配置代碼以下:
const stylelint = require('stylelint')
module.exports = {
plugins: {
'stylelint': {
config: {
rules: {
'declaration-no-important': true
}
}
}
}
}
複製代碼
這裏咱們添加了declaration-no-important這樣一條規則,當咱們的代碼中出現了「!important」時就會給出警告。好比下面的代碼:
/** a.scss**/
$base-color: red;
html {
body{
color: $base-color !important;
}
}
複製代碼
打包效果以下圖:
能夠看出給出警告。 使用stylelint能夠檢測出代碼中的樣式問題(語法錯誤、重複的屬性等),幫助咱們寫出更加安全而且風格更加一致的代碼。CSS Modules 模塊化是css的全局的終結者,就是說你永遠不用擔憂命名太大衆化而形成衝突,只要用最有意義的名字就好了。 css 模塊化是近幾年比較流行的一種開發模式,讓css跟其餘開發語言同樣,具備本身的模塊做用域,讓css也擁有模塊化的特色:
使用CSS Modules 不須要額外安裝其餘組件,只須要配置css-loader便可。 配置web pack.config.js配置以下:
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
context: path.join(__dirname, './src'),
entry: {
index: './index.js'
},
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
mode: 'development',
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', {
loader: 'css-loader',
options: {
modules: {
localIdentName: '[path][name]__[local]--[hash:base64:5]',
}
}
}]
},
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
cacheDirectory: true,
presets: [
[
'env', {
modules: false
}
]
]
}
}
}
],
}
}
複製代碼
咱們只須要配置modules.localIdentName配置便可
/** style.css**/
.tit {
color: #ff0000;
}
複製代碼
// index.js
import style from './style.css';
document.write(`<p class="${style.tit}">hello webpack2</p>`);
複製代碼
編譯後發現代碼成了一個class爲.style__tit--Vp6X7,之前我在j s中引入c s s文件,直接import引入便可,不須要定義一個名稱,可是這個c s s modules 引入c s s的時候須要定義一個對象,而後再引用,最終這個HTML中的class才能與咱們編譯後的CSS類名匹配上。 運行效果如圖:
今天與你們分享的主要是postcss相關的,主要包括到postcss與webpack結合使用,autoprefixer自動添加前綴,stylelint檢測代碼,css modules等等。這只是我的觀點,若是有不足,還請多指教。若是想了解更多,請掃描下面的二維碼: