Webpack 如何在每次构建之前自动清理构建目录
如何在每次构建之前自动清理构建目录
- npm scipt结合rm rf清理
- clean-webpack-plugin
rm rf ./dist
这个方法其实并不优雅,可以用clean-webpack-plugin
package.json
{
"script":"rm rf ./dist && webpack"
}
clean-webpack-plugin
clean-webpack-plugin默认会删除output指定的输出目录
安装
npm i clean-webpack-plugin@2.0.2 -D
配置plugin
'use strict';
const path = require('path');
// 将css commonjs 抽成css文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 压缩css文件
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
// 压缩html,有几个入口就对应几个html
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 每次构建的时候自动清除之前的dist目录
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
// 生产模式还是开发模式
mode: 'production',
// 入口 指定入口文件
entry: {
// app: './src/index.js',
// search:'./src/search.js',
reactComp: './src/react-comp.js'
},
// 出口
output: {
// 指定输出目录
path: path.join(__dirname, 'dist'),
filename: '[name]_[chunkhash:8].js'
},
// 配置loader
module: {
rules: [
{
test: /.js$/,
use: 'babel-loader'
},
{
test: /.css$/,
use: [
MiniCssExtractPlugin.loader,
// 'style-loader', // 再将样式插入到style标签中
'css-loader' // 将css转换成commonjs
]
},
{
test: /.less$/,
use: [
MiniCssExtractPlugin.loader,
// 'style-loader', // 再将样式插入到style标签中
'css-loader', // 将css转换成commonjs
'less-loader' // 将less文件转换成css文件
]
},
{
test: /\.(png|jpg|gif|jpeg)$/,
use: [
{
loader:'file-loader',
// 图片指纹
options:{
name:'[name]_[hash:8].[ext]'
}
// loader: 'url-loader',
// options: {
// limit: 40 * 1024 // 40k
// }
}
]
},
{
test: /\.(woff|woff2|eot|ttf|otf|otf)$/,
use: [
{
loader:'file-loader',
options:{
name:'[name]_[hash:8].[ext]'
}
}
]
}
]
},
plugins:[
// css使用contenthash,避免css没变js变化的时候,css的hash值页随着发布一起变化
new MiniCssExtractPlugin({
filename:'[name]_[contenthash:8].css',
}),
// 压缩css文件
new OptimizeCssAssetsPlugin({
assetNameRegExp:/\.css$/g,
// css预处理器
cssProcessor:require('cssnano')
}),
// 压缩html
new HtmlWebpackPlugin({
// html模板所在路径
template:path.join(__dirname,'src/index.html'),
// 指定输出文件名称
filename:'reactComp.html',
// 使用哪个chunk生成html页面
chunks:['reactComp'],
// 为true时,js\css\会自动注入此html中来
inject:true,
// 处理换行,空格,注释
minify:{
html5:true,
collapseWhitespace:true,
preserveLineBreaks:false,
minifyCSS:true,
minifyJS:true,
removeComments:false
}
}),
// 自动清除dist
new CleanWebpackPlugin()
]
}
再次运行npm run build查看效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2019-09-24 7 JavaScript函数调用&this关键字&全局对象&函数调用&闭包
2019-09-24 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递
2019-09-24 5 JSON&与JavaScript转换&JavaScript:void(0)&JavaScript代码规范