postCSS-loader配置,让css随心所欲

postCSS-loader配置,让css随心所欲

组件必不可少的一部分就是 css,这里看下关于 css的一些 loaders

PostCSS

PostCSS 官网是这么介绍自己的:

PostCSS is a tool for transforming styles with JS plugins. These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.

他是一款通过 JS 插件转换 styles 样式的工具。

webpack 里面可以通过 postCSS-loader 来使用 PostCSS

使用

首先是安装 postCSS-loader

npm install postcss-loader --save-dev

下面是一个 webpack config 的例子:

var precss       = require('precss'); // 实现类Sass的功能,变量,嵌套,mixins
var autoprefixer = require('autoprefixer'); // 自动添加浏览器前缀

module.exports = {
    module: {
        loaders: [
            {
                test:   /\.css$/,
                loader: "style-loader!css-loader!postcss-loader" //在使用 css-loader,style-loader之前处理
            }
        ]
    },
    postcss: function () { // postcss 插件
        return [precss, autoprefixer];
    }
}

上面的例子使用了两个 postcss 插件,应该预先安装:

npm install precss --save-dev
npm install autoprefixer --save-dev

在文件中引入的css将通过 PostCSS 插件的处理:

var css = require('./file.css');
or
import './file.css'
// => CSS after Autoprefixer and CSSWring

插件组

如果你想对不同目录或类型的 css使用不同的 PostCSS 插件配置进行处理,可以使用 ?pack=name 参数

module.exports = {
    module: {
        loaders: [
            {
                test:   /\.docs\.css$/,
                loader: "style-loader!css-loader!postcss-loader?pack=cleaner" // 对docs目录下的css使用 cleaner 的配置
            },
            {
                test:   /\.css$/,
                loader: "style-loader!css-loader!postcss-loader" // 对其他目录下的css使用 defaults 的配置
            }
        ]
    },
    postcss: function () {
        return {
            defaults: [precss, autoprefixer],
            cleaner:  [autoprefixer({ browsers: [] })]
        };
    }
}

写在 js 中的样式

可以通过 postcss-js 插件处理写在 js 中的样式

{
    test:   /\.style.js$/,
    loader: "style-loader!css-loader!postcss-loader?parser=postcss-js"
}

也可以通过 babel 结合 postcss-js 处理 es6 语法中的样式

{
    test:   /\.style.js$/,
    loader: "style-loader!css-loader!postcss-loader?parser=postcss-js!babel"
}

你可以像下面这样写样式

import colors from '../config/colors';

export default {
    '.menu': {
        color: colors.main,
        height: 25,
        '&_link': {
            color: 'white'
        }
    }
}
0%