在实际项目中css需要兼容不同的浏览器,那么就需要使用插件将写好的css代码,做兼容性处理。这里我介绍下在 webpack5 中处理兼容性
此时webpack提供了postcss-loader和对应插件postcss-preset-env
而这两个东西的使用在webpack4和webpack5有些许不同
{
loader: 'postcss-loader',
options: {
// webpack4配置
// ident: 'postcss',
// plugins: () => [
// // postcss插件
// require('postcss-preset-env')()
// ]
//webpack5
postcssOptions: {
plugins: [
require('postcss-preset-env')(),
]
}
}
}
而对应的插件postcss-preset-env是帮postcss找到package.json中的browserlist里面的配置,通过配置加载指定的css兼容性样式
我们需要对应的在package.json中配置browserlist
"browserslist": {
"development": [
"last 1 chrome version"
],
"production": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
在打包的过程中默认使用 production 模式, 那么在开发中,需要在webpack.config.js 中将node.js 的环境变量设置为 development
process.env.NODE_ENV = 'development'
以下是自己测试用的代码
/**
* 开发环境
*/
const {resolve} = require('path')
const htmlWebpackPlugin = require('html-webpack-plugin')
const miniCssExtractPlugin = require('mini-css-extract-plugin')
//process.env.NODE_ENV = 'development'
module.exports = {
// 入口起点
entry: './src/index.js',
// 出口文件
output: {
// 输出文件名
filename: 'built.js',
path: resolve(__dirname, 'build')
},
// loader 的处理
module: {
rules: [
// 详细loader配置
{
test: /\.css$/,
use: [
// 'style-loader',
miniCssExtractPlugin.loader,
'css-loader',
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
require('postcss-preset-env')(),
]
}
}
},
]
},
{
test: /\.less$/,
use: [
// 'style-loader',
miniCssExtractPlugin.loader,
'css-loader',
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
require('postcss-preset-env')(),
]
}
}
},
'less-loader'
]
},
{
// 处理图片资源
test: /\.(jpg|png|gif)$/,
// 使用一个loader
loader: "url-loader",
options: {
// 图片小于 8kb 就处理为 base64
limit: 8*1024,
// 关闭es6 模式
esModule: false,
// 给图片重命名, ext 取源文件的扩展名
name: '[hash:10].[ext]',
// 将图片输出到输出目录的 img 下
outputPath: 'img'
},
},
{
test: /\.html$/,
loader:"html-loader"
},
{
exclude: /\.(html|css|less|jpg|png|js|gif)/,
loader: "file-loader",
options: {
name: "[hash:10].[ext]"
}
}
]
},
// plugins 配置
plugins: [
// 详细plugins 的配置
new htmlWebpackPlugin({
template: './index.html',
}),
new miniCssExtractPlugin({
filename: "css/[name].css"
})
],
// 模式
//mode: "development",
mode: "production",
devServer: {
//
contentBase: resolve(__dirname,'build'),
// 启动gzip 压缩
compress: true,
// 端口号
port: 3000,
// 自动打开浏览器
open: true
},
}