项目目录如下:
打包预览(dist 和 index.html)
引入css文件(index.ts)
import "./style/index.less";
console.log('entry');
打包配置(webpack.prod.js)
const webpackCommonConf = require('./webpack.common.js')
const { merge } = require('webpack-merge')
const { distPath } = require('./paths')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserJSPlugin = require('terser-webpack-plugin')
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
module.exports = merge(webpackCommonConf, {
mode: 'production',
devtool: 'source-map',
output: {
filename: 'app/[name].[contenthash:8].bundle.js',
path: distPath,
clean: true
// publicPath: 'http://cdn.abc.com' // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到
},
module: {
rules: [
// 图片 - 考虑 base64 编码的情况
{
test: /\.(png|jpg|jpeg|gif)$/,
use: {
loader: 'url-loader',
options: {
// 小于 5kb 的图片用 base64 格式产出
// 否则,依然延用 file-loader 的形式,产出 url 格式
limit: 5 * 1024,
// 打包到 img 目录下
outputPath: '/img/',
// 设置图片的 cdn 地址(也可以统一在外面的 output 中设置,那将作用于所有静态资源)
// publicPath: 'http://cdn.abc.com'
}
}
},
// 抽离 css
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
]
},
// 抽离less
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader',
'postcss-loader'
]
}
]
},
plugins: [
// 分离CSS
new MiniCssExtractPlugin({
filename: 'css/[name].[contenthash:8].css',
})
],
optimization: {
// 压缩css
minimize: true,
minimizer: [new TerserJSPlugin({}), new OptimizeCssAssetsPlugin({})]
}
})
插件介绍
分离CSS插件
- MiniCssExtractPlugin
本插件会将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文 件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加 载。本插件基于 webpack v5 的新特性构建,并且需要 webpack 5 才 能正常工作。
压缩插件
- CssMinimizerWebpackPlugin
这个插件使用 cssnano 优化和压缩 CSS。
- TerserWebpackPlugin
该插件使用 terser 来压缩 JavaScript(在本例中主要压缩js中的css)