首页 > 建站教程 > 前端框架 >  webpack5学习笔记:plugin、cleanWebpackPlugin、htmlWebpackPlugin、CopyWebpackPlugin正文

webpack5学习笔记:plugin、cleanWebpackPlugin、htmlWebpackPlugin、CopyWebpackPlugin

# plugin


## 解释

1. Loader是用于特定的模块类型进行转换

2. Plugin可以用于执行更加广泛的任务,比如打包优化、资源管理、环境变量注入等



# cleanWebpackPligin 打包时自动清除上次打包的文件

## 安装

`npm install clean-webpack-plugin` -D


## webpack.config.js 中使用

1. 在配置文件中导入

`const { CleanWebpackPlugin } = require('clean-webpack-plugin')`

2. 配置

```

module.exports = {

    module: {

    },

    plugins: [

        new CleanWebpackPlugin()

    ]

}

```

# htmlWebpackPligin 配置入口html,默认模板在 node_modules/html-webpack-plugin 的 default_index.ejs 文件

## 安装

`npm install html-webpack-plugin` -D


## webpack.config.js 中使用

1. 在配置文件中导入

`const HtmlWebpackPlugin = require('html-webpack-plugin')`

2. 在没有指定打包模板下,配置,自动生成

```

module.exports = {

    module: {

    },

    plugins: [

        new HtmlWebpackPlugin({

            title: '自定义页面title'

        })

    ]

}

```

3. 指定打包的模板

    ① 在根目录新建文件,如 public/index.html,内容如下,其中的输出方式为 ejs 语法,htmlWebpackPligin 内置了ejs插件

```

<!DOCTYPE html>

<html>

  <head>

    <meta charset="UTF-8" />

    <link rel="icon" href="<%= BASE_URL %>/favicon.ico" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title><%= htmlWebpackPlugin.options.title %></title>

  </head>

  <body>

    <noscript>

        <strong>非常抱歉,禁用JavaScript导致 <%= htmlWebpackPlugin.options.title %> 无法正常工作,请启动!</strong>

    </noscript>

    <div id="app"></div>

  </body>

</html>

```

    注意:模板中无需引入打包的js,htmlWebpackPligin 会自动引用

        BASE_URL 为一个全局常量,webpack 的 DefinePlugin 插件可以实现

    ② 在webpack.config.js中配置:

```

const { DefinePlugin} = require('webpack')


module.exports = {

    module: {

    },

    plugins: [

        new HtmlWebpackPlugin({

            title: '自定义页面title',

            template: './public/index.html'

        }),

        // 定义常量 BASE_URL

        new DefinePlugin({

            BASE_URL: '"./"'

        })

    ]

}

```

# DefinePlugin 允许在编译时, 配置全局常量,是一个webpack内置的插件,不用安装

## webpack.config.js中的配置

```

module.exports = {

    module: {

    },

    plugins: [

        // 定义常量 BASE_URL

        new DefinePlugin({

            BASE_URL: '"./"' // 注意这里的字符串,外面必须再套一个引号

        })

    ]

}

```


# CopyWebpackPlugin 将文件拷贝到打包文件夹内

## 安装 `npm install copy-webpack-plugin -D`

## 引入 `const CopyWebpackPlugin = require('copy-webpack-plugin')`

## 配置

```

module.exports = {

    module: {

    },

    plugins: [

        new CopyWebpackPlugin({

            patterns: [

                {

                    from: 'public',  // 从 public 目录 复制

                    // to: 'build', // 复制到哪里,一般省略,就复制到 webpack 配置的打包路径的根目录

                    globOptions: {

                        // 忽略不拷贝的文件,注意这里的 **

                        ignore: [

                            '**/index.html',

                            '**/.DS_Store',

                            '**/a.txt'

                        ],

                    }

                }

            ]

        })

    ]

}

```