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
webpack.config.js
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
webpack.config.js. - Chạy
npm run build.
Cài đặt plugin MiniCssExtractPlugin
npm install --save-dev mini-css-extract-plugin

Cài đặt plugin OptimizeCSSAssetsPlugin
npm install --save-dev optimize-css-assets-webpack-plugin

Chỉnh file webpack.config.js
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ú ý là nội dung trên không cần
style-loadernhé, vì sau khi minify xong, thì ta cần chạy file trực tiếp. - Giải thích một chút về nội dung trên:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
- Gọi 2 plugin, và gán vào 2 biến
MiniCssExtractPluginvàOptimizeCSSAssetsPlugin.
optimization: {
minimizer: [new OptimizeCSSAssetsPlugin({})],
},
- Sử dụng
OptimizeCSSAssetsPlugintiến hành minify CSS.
new MiniCssExtractPlugin({
filename: 'style.min.css'
})
- Sử dụng plugin
MiniCssExtractPlugintrả kết quả file với tênstyle.min.css.
MiniCssExtractPlugin.loader,
- Load, thực thi plugin
MiniCssExtractPlugin.
Chạy lệnh npm:
npm run build
- Lúc này ta sẽ thấy bên trong thư mục
distsẽ xuất hiện 1 filestyle.min.cssđã được minizie từ filestyle.css. - Đồng thời khi này, nội dung file
index.htmlđã được tự động liên kết với filestyle.min.cssvừa tạo.
Nội dung file style.min.css
div{color:#00f}
Nội dung file /dist/index.html
<!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>
- Cấu trúc thư mục lúc này:
Webpack-project
node_modules
- ...
package.json
webpack.config.js
package-lock.jsondist
index.html
newfile.js
style.min.css
src
index.js
my-test.js
style.css
Cài đặt và xử lý minify cho nhiều file CSS
- Giả sử ta có thêm file
top.cssbên trong thư mụcsrcvới nội dung như sau:
p {
background-color: #f1f1f1;
}
- Để minify cho 2 file
style.cssvàtop.css, ta chỉ cần import thêm filetop.cssbên trong file/src/index.js:
Nội dung file /src/index.js
import './style.css';
import './top.css';
function component() {
const element = document.createElement('div');
element.innerHTML = 'Hello World!';
return element;
}
document.body.appendChild(component());
Chạy lệnh npm:
npm run build
- Lúc này ta sẽ thấy bên trong thư mục
distsẽ xuất hiện 1 filestyle.min.cssvới nội dung đã được minizie từ 2 file/src/style.cssvà/src/top.css.
div{color:#00f}p{background-color:#00f}
- Cấu trúc thư mục lúc này:
Webpack-project
node_modules
- ...
package.json
webpack.config.js
package-lock.jsondist
index.html
newfile.js
style.min.css
src
index.js
my-test.js
style.css
top.css
- Ngoài cách trên, ta cũng có thể minify cho nhiều CSS bằng cách, dùng CSS
@importcác file CSS khác vào bên trong filestyle.cssvẫn được. - 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.
Các lệnh chính đã sử dụng trong toàn bộ bài học
| Bài học | Lệnh đã dùng |
|---|---|
| Cài đặt Webpack |
cd Webpack-project npm init -y npm install --save-dev webpack npm install --save-dev webpack-cli |
| Webpack bundle |
npx webpack |
| Cấu hình Webpack |
npx webpack --config webpack.config.js npm run build |
| Webpack quản lý output |
npm run build |
| Webpack code splitting |
npm install --save lodash npm run build npm run build |
| Cài đặt và setting HtmlWebpackPlugin |
npm install --save-dev html-webpack-plugin npm run build |
| Cài đặt và setting CleanWebpackPlugin |
npm install --save-dev clean-webpack-plugin npm run build |
| Webpack Cache |
npm run build npm run build |
| Webpack gom chung các file javascript |
npm run build |
| Webpack source map |
npm run build npm run build |
| Webpack css loader |
npm install --save-dev style-loader css-loader npm run build |
| Webpack minify CSS - OptimizeCSSAssetsPlugin |
npm install --save-dev mini-css-extract-plugin npm install --save-dev optimize-css-assets-webpack-plugin npm run build npm run build |

