Webpack对CSS的兼容处理

167 阅读2分钟

前言

上一篇,我们说了webpack对css的引入方式,现在我们再来说说css兼容在webpack中是如何进行的。

css兼容

我们都知道css是相对于浏览器的,所以兼容也是对于浏览器进行,那么哪些浏览器是需要进行兼容处理呢? 这里我们使用 caniuse ,这个网站的作用就是对 CSS,JS 的一些兼容性进行展示,从而让我们得心应手。

对浏览器进行兼容,一般都是给css加上各浏览器的前缀,每一个css都手动添加的话,过于繁琐,有的时候还可能会遗漏,不利于开发,于是就出现了 browserslitrcpostcss

browserslitrc 和 postcss

1. browserslitrc文件

对于browserslitrc ,你可能见过,使用脚手架创建的项目,在package.json中结尾处,以这样的形式出现:

image.png

讲讲参数,> 1%: 支持市场份额大于 1% 的浏览器,last 2 version: 即支持各类浏览器最近的一个版本,当然这里的 2 是可变的数字。

我们这里放在单独的 browserslistrc 文件里,之间创建 .browserslistrc 文件(名称就是这个,. 前面什么都没有)

先安装 npm i browserslist , 然后在控制台运行命令 npx browserslist ,就会显示出浏览器。

2. postcss处理

第一步,进行插件的安装:
npm i postcss postcss-cli -D

这里还需要配合 autoprefixer ,也是需要安装的,Autoprefixer是一款自动管理浏览器前缀的插件,它可以解析CSS文件并且添加浏览器前缀到CSS内容里。

创建一个css文件用于测试,这里我创建test文件,样式如下:

image.png

此时需要用到一条命令: npx postcss --use autoprefixer -o ret.css ./src/css/test.css ret.css是你运行命令后生成文件的名称。在ret中就能看到css被加上了前缀。

3.postcss-loader

接上文,如果你的css很多,这时候就会对每个css运行一遍添加前缀命令,过于麻烦,此时就出现了postcss-loader,由于使用的是webpack5,所以直接安装最新版本,如果使用 webpack v4 的话,你需要安装 postcss-loader v4。

在webpack.config.js中添加参数:

module:{
    rules:[
        {
            test: /\.css$/, //使用正则匹配.css后缀的文件
            //style-loader,css-loader有执行先后顺序,不然打包会出错
            use: ['style-loader',
                  'css-loader',
              {
                loader:'postcss-loader',
                options:{
                    postcssOptions:{
                        plugins:[
                            require('autoprefixer')
                        ]
                    }
                }
              }
            ]
        }
    ]
}

postcss工作是在css-loader之前,先把需要添加的前缀添加上,再把css代码交给css-loader,处理之后交给style-loader。

配置好loader,不需要再运行上文的命令来生成css文件,直接对项目进行打包 npm run build ,页面控制台中就能看到css自动添加上了前缀。

image.png

4.postcss-preset-env

这里在说一个小点,某些新的css特性 autoprefixer 不能帮我们转换,它只能帮助我们添加浏览器前缀。

例如,把此题颜色修改成16进制:

.title{
    color:#12345678;
}

不是所有浏览器都支持这种 8 位十六进制颜色码,结果就是没效果或者报错,这个时候就可以使用 postcss-preset-env 插件来实现对 CSS 特性的转换了。

需要安装它,因为它也是个独立的插件, npm install postcss-preset-env -D

还是一样在 webpack.config.js 中引入,如下:

module:{
    rules:[
        {
            test: /\.css$/, //使用正则匹配.css后缀的文件
            //style-loader,css-loader有执行先后顺序,不然打包会出错
            use: ['style-loader',
                  'css-loader',
              {
                loader:'postcss-loader',
                options:{
                    postcssOptions:{
                        plugins:[
                            require('autoprefixer'),
                            require('postcss-preset-env')
                        ]
                    }
                }
              }
            ]
        }
    ]
}

重新打包项目,查看浏览器控制台,会发现 color 值 被转换成了 rgba ,多数浏览器都是支持 rgba

image.png

因此,开发中,对于一些现代 CSS 特性,更多情况下,我们会使用 postcss-preset-env 这个插件,而不是 autoprefixer 这个插件。

总结

到此,webpack对css的兼容问题就说完了,希望对你有所帮助,同时呢,有不足的地方也请评论指出,下一篇将分享《webpack对图片资源的处理方法》,尽情期待。