1.安装

案例续上一节的代码,在样式中flexbackface-visibility都存在兼容性问题。
postcss-loader
postcss-preset-env插件已经包含了autoprefixer。它通过读取package.json文件的browserslist字段来给css添加兼容性,其读取字段也和process.env.NODE_ENV有关,和webpack的mode无关。

  1. npm i postcss postcss-loader postcss-preset-env -D

2.package.json

browserslist配置详情

  1. {
  2. "...": "...",
  3. "browserslist": {
  4. "development": [
  5. "last 1 chrome version",
  6. "last 1 firefox version",
  7. "last 1 safari version"
  8. ],
  9. "production": [
  10. ">0.2%",
  11. "not dead",
  12. "not op_mini all"
  13. ]
  14. }
  15. }
  • last 1 chrome version:兼容最近一个chrome浏览器版本。
  • >0.2%:大于99.8%的浏览器。
  • not dead:不要已经死的浏览器,比如IE10。
  • not op_mini all:op_mini浏览器已经很少用了,不去兼容。

3.webpack.config.js

webpack.config.js
这里故意没有给less加兼容性,可以看build后的文件区别。

  1. // ...
  2. // 默认读取的是production
  3. process.env.NODE_ENV = 'development'
  4. module.exports = {
  5. // ...
  6. module: {
  7. rules: [
  8. {
  9. test: /\.css$/,
  10. use: [
  11. MiniCssExtractPlugin.loader,
  12. 'css-loader',
  13. {
  14. loader: 'postcss-loader',
  15. options: {
  16. postcssOptions: { plugins: ['postcss-preset-env'] },
  17. },
  18. }
  19. ],
  20. },
  21. {
  22. test: /\.less$/,
  23. use: [
  24. MiniCssExtractPlugin.loader,
  25. 'css-loader',
  26. 'less-loader',
  27. ],
  28. }
  29. ]
  30. },
  31. // ...
  32. }