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查看效果

posted @   IslandZzzz  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· 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代码规范
点击右上角即可分享
微信分享提示