摘要:的定位屬于預(yù)處理器嗎還是屬于后置處理器都不是,因?yàn)榫唧w做的事取決于開發(fā)者使用了什么插件。這里做一個(gè)我覺得比較恰當(dāng)?shù)念惐?,中的相?dāng)于的中的,,等預(yù)處理器相當(dāng)于,雖然不是完全合理,但是還是比較恰當(dāng)。
前言
原諒我取這樣的標(biāo)題,我知道 postCss 對(duì)于大多數(shù)前端開發(fā)者來說早已經(jīng)很熟悉了,但是樓主作為一個(gè)初出茅廬的前端er,還有好多的工具和技術(shù)沒接觸過,說來慚愧。雖然平時(shí)也喜歡使用css預(yù)處理器比如 sass、less、stylus,但是關(guān)于css的其他工具確實(shí)接觸的少,postCss就是一個(gè)例子,于是今天就對(duì)它了解了一番。如果你對(duì)postCss也不是很了解,那么希望這篇博客可以幫助到你。
什么是 postCss?postCss 不是什么新玩意,而是一個(gè)幾年前就被廣泛使用的工具。我們通常說的 postCss 一般指兩個(gè)方面:
postCss 本身。
postCss 衍生的生態(tài)系統(tǒng),比如各種插件。
postCss 本身是一個(gè)JavaScript 模塊,它會(huì)讀取我們的css代碼,然后將它們轉(zhuǎn)化為一個(gè) 抽象語法樹 (abstract syntax tree)。它還是一個(gè)插件系統(tǒng),它提供了一些api,開發(fā)者可以基于這些 api 開發(fā)插件。
postCss 將我們的css代碼轉(zhuǎn)為抽象語法樹后,我們可以使用各種的插件去實(shí)現(xiàn)各種的功能,最后會(huì)轉(zhuǎn)化為字符串輸出到一個(gè)文件中。這里的插件可以是已存在的插件,也可以是按自己需要自己定制的插件。
postCss 的定位postCss 屬于 預(yù)處理器 (preprocessor) 嗎?還是屬于 后置處理器 (postprocessor) ?都不是,因?yàn)?postCss 具體做的事取決于開發(fā)者使用了什么插件。它可以通過相應(yīng)的插件去實(shí)現(xiàn)類似 sass 等預(yù)處理器的功能,如: precss;也可以通過相應(yīng)的插件執(zhí)行后置處理器的工作,如:autoprefixer。
這里做一個(gè)我覺得比較恰當(dāng)?shù)念惐?,css 中的 postCss 相當(dāng)于 JavaScript 的 babel;css 中的 sass,less,stylus 等預(yù)處理器相當(dāng)于 Typescript,雖然不是完全合理,但是還是比較恰當(dāng)。
如何使用 postCss其實(shí)我們很多時(shí)候都無意的使用到了 postCss,autoprefixer 就是一個(gè)例子,這個(gè)插件的功能就是自動(dòng)的為我們的css代碼加上對(duì)應(yīng)的前綴,以便兼容更多的瀏覽器,很多腳手架都會(huì)使用到這個(gè)插件。postCss 如何使用呢?使用方法 總的來說就是根據(jù)自己的構(gòu)建工具或生產(chǎn)環(huán)境進(jìn)行對(duì)應(yīng)的配置。以 webpack 為例:
// 使用postcss-loader module.exports = { module: { rules: [ { test: /.css$/, exclude: /node_modules/, use: [ { loader: "style-loader", }, { loader: "css-loader", options: { importLoaders: 1, } }, { loader: "postcss-loader" } ] } ] } }
// 建立對(duì)應(yīng)的配置文件 postcss.config.js,使用對(duì)應(yīng)的插件實(shí)現(xiàn)對(duì)應(yīng)的功能。 module.exports = { plugins: [ require("precss"), require("autoprefixer") ] }如何根據(jù)自己需要定制一個(gè) postCss 插件?
雖然現(xiàn)在postCss的插件已經(jīng)非常豐富了,但是有時(shí)候還是需要自己寫一個(gè)插件來滿足自己的需求,下面來逐步說一下如何自己定制一個(gè)postCss插件。
插件效果處理前:
div { color: mycolor }
處理后:
div { color: crimson }
這個(gè)插件的功能就是將我們 css 文件中的 mycolor 變量替換為 赤紅色 crimson。
準(zhǔn)備假設(shè)我們用的構(gòu)建工具是 webpack。先簡單的搭建一個(gè)webpack的工作環(huán)境:webpack 起步
// 新建文件夾 webpackStarterProject 然后運(yùn)行 npm init -y npm install --save-dev webpack webpack-cli npm install --save-dev style-loader css-loader postcss-loader
文件目錄
// webpackStarterProject root path node_modules index.js style.css index.html package.json webpack.config.js
然后 webpack.config.js 的配置與上面的配置基本一致。
const path = require("path") // 使用postcss-loader module.exports = { entry: "./index.js", output: { filename: "bundle.js", path: path.resolve(__dirname, "dist") }, mode: "development", module: { rules: [ { test: /.css$/, exclude: /node_modules/, use: [ { loader: "style-loader", }, { loader: "css-loader", options: { importLoaders: 1, } }, { loader: "postcss-loader" } ] } ] } }
index.js 文件加入以下代碼:
// index.js import "./style.css";
style.css 文件加入以下代碼:
div { color: mycolor }
index.html 文件加入以下代碼:
Document what is my color ?
到這里我們的工作環(huán)境搭建完畢,開始編寫自己的postCss插件。
開始編寫插件通常情況下,我們使用第三方插件的時(shí)候,都是通過npm將第三方插件包下載到項(xiàng)目的node_modules中來使用,這里因?yàn)槲覀兪亲约壕帉懖寮?,所以直接?node_modules 中加入自己要編寫的插件。在 node_modules 中新建文件夾 postcss-myplugin 來編寫我們的插件。
// webpackStarterProject root path node_modules |--- postcss-myplugin index.js style.css index.html package.json webpack.config.js
進(jìn)入postcss-myplugin 文件夾,運(yùn)行以下命令:
npm init -y npm install --save postcss
在 postcss-myplugin 文件夾中新建一個(gè) index.js,并加入一下代碼:
const postcss = require("postcss"); // 使用 postcss.plugin 方法創(chuàng)建一個(gè)插件 module.exports = postcss.plugin("myplugin", function myplugin() { return function (css) { // 此插件的功能將在這里添加。 } });
然后在 webpackStarterProject 根目錄下添加postcss配置文件 postcss.config.js:
module.exports = { plugins: [ // 引用我們的插件 require("postcss-myplugin") ] }
當(dāng)前主要文件結(jié)構(gòu)為:
// webpackStarterProject root path node_modules |--- postcss-myplugin |---node_modules |---index.js index.js style.css index.html package.json webpack.config.js postcss.config.js
接下來我們就可以繼續(xù)去實(shí)現(xiàn)自己插件的功能了,postCss提供了一系列的 api 方便我們開發(fā)插件 PostCss Api。
給插件添加功能:
const postcss = require("postcss"); module.exports = postcss.plugin("myplugin", function myplugin() { return function (css) { css.walkRules(rule => { // 遍歷規(guī)則節(jié)點(diǎn) rule.walkDecls((decl) => { // 遍歷聲明節(jié)點(diǎn) let value = decl.value; if (value.indexOf("mycolor") != -1) { // 將 mycolor 變量替換為 crimson decl.value = value.replace("mycolor", "crimson") } }) }) } });
大功告成!最后在package.json的script字段中添加以下命令:
"start": "webpack --config webpack.config.js"
運(yùn)行命令打包代碼,在瀏覽器中查看效果:
npm start
最后插件也可以再處理一下然后發(fā)布到npm上開源出去。
總結(jié)postCss 本身是一個(gè)nodejs module,用于轉(zhuǎn)換css代碼成一個(gè)抽象語法樹,然后我們可以利用各種插件實(shí)現(xiàn)對(duì)css的各種操作。
postCss 既不是預(yù)處理器也不是后置處理器,而是類似于babel的角色,做什么事情取決于使用了什么插件。
可以定制自己的插件,實(shí)現(xiàn)自己想要的功能。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/114229.html
摘要:優(yōu)化代碼拆分從入口文件開始,遞歸地構(gòu)建了整個(gè)應(yīng)用的模塊依賴圖表,然后通常會(huì)將所有的模塊打包成一個(gè)。 如果你還不知道什么是React,請(qǐng)點(diǎn)擊這里github源碼 安裝Node.js 如果你還不知道什么是ECMAScript,請(qǐng)點(diǎn)擊這里 如果你還不知道什么是Node.js,請(qǐng)點(diǎn)擊這里 下載Node.js并安裝;接著打開windows命令行窗口分別輸入node -v及npm -v如下圖所示,...
摘要:下面的代碼違反規(guī)則下面的代碼符合規(guī)則禁止使用十六進(jìn)制顏色十六進(jìn)制的顏色違反規(guī)則無效的十六進(jìn)制色同樣違規(guī)下面的是符合規(guī)則的自動(dòng)將十六進(jìn)制色轉(zhuǎn)換為大寫或者小寫可以使用實(shí)現(xiàn)同樣的功能。 showImg(https://segmentfault.com/img/remote/1460000014782565); 在PostCSS官網(wǎng)有著這樣的對(duì)PostCSS特性介紹,箭頭后面是對(duì)應(yīng)功能的插件及...
摘要:不信你命令行里敲個(gè)試試敲敲敲當(dāng)然了想直接運(yùn)行命令,你需要將添加到系統(tǒng)變量啊。全局安裝相同的,運(yùn)行命令耐心等待安裝完成后,你的系統(tǒng)變量里就存在命令了,你可以運(yùn)行下試試。上訴如果有不懂的,歡迎留言。 再一次見面! Light 還是太太太懶了,距離上一篇沒啥營養(yǎng)的文章已經(jīng)過去好多天。今天為大家介紹介紹 webpack 最基本的概念,以及簡單的配置,讓你能快速得搭建一個(gè)可用的 webpack ...
摘要:本期主要介紹以下幾個(gè)插件和幾個(gè)坑和坑這個(gè)就不用多說了,必裝插件之一??此茖懛]有任何問題。編譯后的結(jié)果那么這樣就沒有問題了。 PostCSS常用插件介紹 繼上一次PostCSS學(xué)習(xí)指南(一)后,漸漸開始在項(xiàng)目中應(yīng)用。 這次決定主要講解一些個(gè)人認(rèn)為非常有幫助的PostCSS插件。 本期主要介紹以下幾個(gè)插件和幾個(gè)坑 autoprefixer postcss-partial-import...
摘要:所以說的模塊機(jī)制沒有解決文件依賴關(guān)系和文件異步加載的問題。大部分團(tuán)隊(duì)還是停留在第二第三階段,每個(gè)階段的實(shí)現(xiàn)都有很多種選擇。希望這篇文章能夠激起大家永遠(yuǎn)保持積極向前追求完美代碼的心,不僅對(duì)自己的成長也會(huì)對(duì)公司帶來無限的價(jià)值。 本篇技術(shù)博客來自有著化腐朽為神奇能力的,Worktile 技術(shù)牛人Web 總監(jiān) @徐海峰 大神的分享~滿滿的干貨,你值得擁有! Worktile 的前端構(gòu)建之路 2...
閱讀 3218·2023-04-26 01:49
閱讀 2287·2021-10-13 09:39
閱讀 2529·2021-10-11 11:09
閱讀 997·2019-08-30 15:53
閱讀 2887·2019-08-30 15:44
閱讀 1029·2019-08-30 11:12
閱讀 3087·2019-08-29 17:17
閱讀 2460·2019-08-29 16:57