1. 抽离和压缩CSS只适用于生产环境打包,样式较多的情况下使用。
    1. // 生产环境配置文件
    2. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    3. const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
    4. module.exports = {
    5. mode: 'production',
    6. optimization: {
    7. minimizer: [
    8. new CssMinimizerPlugin(), // 压缩
    9. ],
    10. },
    11. plugins: [
    12. new MiniCssExtractPlugin({ // 抽离
    13. filename: './css/[name].[hash:8].css'
    14. })
    15. ]
    16. }
    1. // 公用配置文件
    2. const resolveApp = require('./paths')
    3. const HtmlWebpackPlugin = require('html-webpack-plugin')
    4. const { merge } = require('webpack-merge')
    5. const TerserPlugin = require('terser-webpack-plugin')
    6. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    7. // 导入其它的配置
    8. const prodConfig = require('./webpack.prod')
    9. const devConfig = require('./webpack.dev')
    10. // 定义对象保存 base 配置信息
    11. const commonConfig = (isProduction) => {
    12. return {
    13. optimization: {
    14. minimizer: [
    15. new TerserPlugin({
    16. extractComments: false
    17. })
    18. ],
    19. },
    20. module: {
    21. rules: [
    22. {
    23. test: /\.css$/,
    24. use: [
    25. isProduction ? MiniCssExtractPlugin.loader : 'style-loader', // 根据 env参数使用 loader
    26. {
    27. loader: 'css-loader',
    28. options: {
    29. importLoaders: 1,
    30. esModule: false
    31. }
    32. },
    33. 'postcss-loader'
    34. ]
    35. },
    36. ]
    37. },
    38. ]
    39. }
    40. }
    41. module.exports = (env) => {
    42. const isProduction = env.production
    43. process.env.NODE_ENV = isProduction ? 'production' : 'development'
    44. // 依据当前的打包模式来合并配置
    45. const config = isProduction ? prodConfig : devConfig
    46. const mergeConfig = merge(commonConfig(isProduction), config)
    47. return mergeConfig
    48. }