Hướng dẫn style css minify - phong cách css minify

  • Trang chủ
  • Hướng dẫn học
  • Hướng dẫn học webpack
  • Webpack minify CSS - OptimizeCSSAssetsPlugin

Webpack minify CSS - OptimizeCSSAssetsPlugin

  • Trước tiên bạn cần hiểu minify là gì, đó là file được loại bỏ tất cả các khoảng trống thừa, gom các dòng code lại thành một hàng duy nhất, giúp giảm tối đa dung lượng file, nhằm giúp tối ưu source code hơn.
  • Với Webpack chúng ta có thể thực hiện việc này một cách tự động, bằng cách cài plugin và thiết lập cài đặt cho
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    3

Cài đặt và xử lý minify CSS

Để tạo được file minify CSS tự động, ta cần thực hiện các bước sau:

  • Cài đặt plugin MiniCssExtractPlugin: plugin này có rất nhiều ứng dụng hay, sẽ giới thiệu ở bài khác nhe.
  • Cài đặt plugin OptimizeCSSAssetsPlugin.
  • Chỉnh
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    3.
  • Chạy
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    5.

Cài đặt plugin MiniCssExtractPlugin

npm install --save-dev mini-css-extract-plugin

Kết quả

Hướng dẫn style css minify - phong cách css minify

Cài đặt plugin OptimizeCSSAssetsPlugin

npm install --save-dev optimize-css-assets-webpack-plugin

Kết quả

Hướng dẫn style css minify - phong cách css minify

Cài đặt plugin OptimizeCSSAssetsPlugin

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};

  • Chỉnh file
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    3
  • Chú ý là nội dung trên không cần
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    7 nhé, vì sau khi minify xong, thì ta cần chạy file trực tiếp.

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

  • Giải thích một chút về nội dung trên:

optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },

  • Gọi 2 plugin, và gán vào 2 biến
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    8 và
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    9.

Sử dụng

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};
9 tiến hành minify CSS.

  • new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })

MiniCssExtractPlugin.loader,

  • Sử dụng plugin
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
      entry: {
        newfile: [
          './src/index.js',
          './src/my-test.js'
        ]
      },
      plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
          title: 'Output Management'
        }),
        new MiniCssExtractPlugin({
          filename: 'style.min.css'
        })
      ],
      output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              /*'style-loader',*/
              'css-loader'
            ]
          }
        ]
      }
    };
    8 trả kết quả file với tên
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    2.

Load, thực thi plugin
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};
8.

  • Chạy lệnh npm:
  • Lúc này ta sẽ thấy bên trong thư mục
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    4 sẽ xuất hiện 1 file
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    2 đã được minizie từ file
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    6.

Đồng thời khi này, nội dung file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
7 đã được tự động liên kết với file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
2 vừa tạo.

Nội dung file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
2

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title<Output Management</title>
  <link href="style.min.css" rel="stylesheet"></head>
  <body>
  <script type="text/javascript" src="newfile.js"></script></body>
</html>

  • Nội dung file
    optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
    0

Webpack-project

  • node_modules

    • Cấu trúc thư mục lúc này:
  • Hướng dẫn style css minify - phong cách css minify
    ...
  • Hướng dẫn style css minify - phong cách css minify
    package.json
  • Hướng dẫn style css minify - phong cách css minify
    webpack.config.js
  • package-lock.json

  • dist

src

  • Cài đặt và xử lý minify cho nhiều file CSS

p {
  background-color: #f1f1f1;
}

  • Giả sử ta có thêm file
    optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
    1 bên trong thư mục
    optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
    2 với nội dung như sau:

Để minify cho 2 file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
6 và
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
1, ta chỉ cần import thêm file
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
1 bên trong file
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
6:

import './style.css';
import './top.css';
function component() {
  const element = document.createElement('div');
  element.innerHTML = 'Hello World!';
  return element;
}
document.body.appendChild(component());

Load, thực thi plugin
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};
8.

  • Chạy lệnh npm:

Lúc này ta sẽ thấy bên trong thư mục

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
4 sẽ xuất hiện 1 file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
2 đã được minizie từ file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
6.

  • Nội dung file
    optimization: {
        minimizer: [new OptimizeCSSAssetsPlugin({})],
      },
    0

Webpack-project

  • node_modules

    • Cấu trúc thư mục lúc này:
  • Hướng dẫn style css minify - phong cách css minify
    ...
  • Hướng dẫn style css minify - phong cách css minify
    package.json
  • Hướng dẫn style css minify - phong cách css minify
    webpack.config.js
  • package-lock.json

  • dist

  • src
  • Cài đặt và xử lý minify cho nhiều file CSS

Giả sử ta có thêm file optimization: { minimizer: [new OptimizeCSSAssetsPlugin({})], },1 bên trong thư mục optimization: { minimizer: [new OptimizeCSSAssetsPlugin({})], },2 với nội dung như sau:

Để minify cho 2 file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
6 và
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
1, ta chỉ cần import thêm file
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
1 bên trong file
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
6:
Nội dung file
optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
6
Lúc này ta sẽ thấy bên trong thư mục
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
4 sẽ xuất hiện 1 file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
2 với nội dung đã được minizie từ 2 file
new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
0 và
new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
1.

npm install --save-dev optimize-css-assets-webpack-plugin
1

npm install --save-dev optimize-css-assets-webpack-plugin
0

npm install --save-dev optimize-css-assets-webpack-plugin
2

Ngoài cách trên, ta cũng có thể minify cho nhiều CSS bằng cách, dùng CSS
new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
2 các file CSS khác vào bên trong file
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
6 vẫn được.

npm install --save-dev optimize-css-assets-webpack-plugin
3

Bài học tiếp theo sẽ giúp chúng ta cách làm tương tự, nhưng với file Javascript.

npm install --save-dev optimize-css-assets-webpack-plugin
4

Các lệnh chính đã sử dụng trong toàn bộ bài học

npm install --save-dev optimize-css-assets-webpack-plugin
5

Bài học

npm install --save-dev optimize-css-assets-webpack-plugin
6

Lệnh đã dùng

npm install --save-dev optimize-css-assets-webpack-plugin
7

Cài đặt Webpack

npm install --save-dev optimize-css-assets-webpack-plugin
8

Webpack bundle

npm install --save-dev optimize-css-assets-webpack-plugin
4

Cấu hình Webpack

npm install --save-dev optimize-css-assets-webpack-plugin
8

Webpack quản lý output

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};
1

Webpack code splitting

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin({})],
  },
  entry: {
    newfile: [
      './src/index.js',
      './src/my-test.js'
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    new MiniCssExtractPlugin({
      filename: 'style.min.css'
    })
  ],
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          /*'style-loader',*/
          'css-loader'
        ]
      }
    ]
  }
};
2