webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发

简介: 这篇文章主要介绍了如何通过配置Webpack的插件,如HtmlWebpackPlugin、uglifyjs-webpack-plugin和webpack-dev-server,来简化前端开发流程。

前言

  1. webpack学习一:什么是模块化开发,什么是webpack,以及二者之间的关系。
  2. webpack学习二:webpack初始用打包,webpack初始用配置文件打包,webpack安装对应的loader
  3. webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
  4. webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
  5. webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境和生产环境

继续沿用上一个案例的项目,复制一份儿,改名为:05-webpack的Plugin
最后的项目结构如下所示:
在这里插入图片描述

一、plugin是什么?

  • plugin是什么?
  1. plugin是插件的意思,通常是用于对某个现有的架构进行扩展。
  2. webpack中的插件,就是对webpack现有功能的各种扩展,比如打包优化,文件压缩等等。
  • loader和plugin区别
  1. loader主要用于转换某些类型的模块,它是一个转换器。
  2. plugin是插件,它是对webpack本身的扩展,是一个扩展器。
  • plugin的使用过程:
  1. 步骤一:通过npm安装需要使用的plugins(某些webpack已经内置的插件不需要安装)
  2. 步骤二:在webpack.config.js中的plugins中配置插件。
  • 下面,我们就来看看可以通过哪些插件对现有的webpack打包过程进行扩容,让我们的webpack变得更加好用。

二、添加版权的Plugin:BannerPlugin

  • 我们先来使用一个最简单的插件,为打包的文件添加版权声明
    该插件名字叫BannerPlugin,属于webpack自带的插件。
  • 按照下面的方式来修改webpack.config.js的文件:
    在这里插入图片描述

重新打包程序,执行打包npm run build命令后:查看bundle.js文件的头部,看到如下信息
在这里插入图片描述

三、打包html的plugin:html-webpack-plugin

  • 目前,我们的index.html文件是存放在项目的根目录下的。
  1. 我们知道,在真实发布项目时,发布的是dist文件夹中的内容,但是dist文件夹中如果没有index.html文件,那么打包的js等文件也就没有意义了。
  2. 所以,我们需要将index.html文件打包到dist文件夹中,这个时候就可以使用 html-webpack-plugin 插件
  • html-webpack-plugin 插件可以为我们做这些事情:
  1. 自动生成一个index.html文件(可以指定模板来生成)
  2. 将打包的js文件,自动通过script标签插入到body中
  • 安装 html-webpack-plugin 插件```
    npm install html-webpack-plugin@3.2.0 --save-dev

    ```

  • 使用插件,修改webpack.config.js文件中plugins部分的内容如下:
    在这里插入图片描述

  1. 这里的 template 表示根据什么模板来生成 index.html
  2. 另外,我们需要删除之前在output中添加的publicPath属性,否则插入的script标签中的src可能会有路径问题。
  • 执行打包npm run build命令后,打包后的dist目录下有了index.html,内容如下:

在这里插入图片描述
在这里插入图片描述

四、js压缩的Plugin:uglifyjs-webpack-plugin

  • 在项目发布之前,我们必然需要对js等文件进行压缩处理
  1. 这里,我们就对打包的js文件进行压缩
  2. 我们使用一个第三方的插件 uglifyjs-webpack-plugin并且版本号指定1.1.1,和CLI2保持一致
npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

修改webpack.config.js文件,使用插件:
在这里插入图片描述
执行打包npm run build命令后,查看打包后的bunlde.js文件,是已经被压缩过了。
在这里插入图片描述

五、搭建本地服务器的plugin:webpack-dev-server

  • webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要的让浏览器自动刷新显示我们修改后的结果。
  • 不过它是一个单独的模块,在webpack中使用之前需要先安装它```
    npm install webpack-dev-server@2.9.3 --save-dev

    ```

  • devserver也是作为webpack中的一个选项,选项本身可以设置如下属性:

  1. `contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist
  2. port:端口号
  3. inline:页面实时刷新
  4. historyApiFallback:在SPA页面中,依赖HTML5的history模式
  • webpack.config.js文件配置修改如下:
    在这里插入图片描述
  • 我们可以再配置另外一个scripts
    –open参数表示直接打开浏览器
    在这里插入图片描述
    这样再终端执行命令:npm run dev ,便可以自动打开浏览器并显示内容了

六、到目前为止webpack.config.js全部内容

const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const uglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, 'dist'), // __dirname: 当前文件的目录
        filename: 'bundle.js',
        // publicPath: 'dist/'
    },
    module: {
        rules: [
            {
                /*
                * 使用多个 loader时,从右往左执行
                * css-loader : 解析 CSS 文件后,使用 import 加载,并且返回 CSS 代码
                * style-loader: 将模块的导出作为样式添加到 DOM 中
                * */
                test: /\.css$/, use: ['style-loader', 'css-loader']
            },
            {
                test: /\.less$/,
                use: [{
                    loader: 'style-loader' // creates style nodes from JS strings
                }, {
                    loader: 'css-loader' // translates CSS into CommonJS
                }, {
                    loader: 'less-loader' // compiles Less to CSS
                }]
            },
            {
                test: /\.(png|jpg|gif)$/i,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            // 当加载的图片,小于 limit 时,会将图片编译成 base64字符串形式
                            // 当加载的图片,大于 limit 时,会使用 file-loader 模块进行加载
                            limit: 8192,
                            // 这个 name 配置  可以在 file-loader 的官网中看到
                            /*
                            * img 文件夹
                            * [name] 传过来的图片名称
                            * [hash:8] 哈希值取前8位
                            * [ext] 带上ext
                            * */
                            name: 'img/[name].[hash:8].[ext]'
                        }
                    }
                ]
            },
            {
                test: /\.m?js$/,
                // 排除 一些包
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env'],
                        plugins: ['@babel/plugin-proposal-object-rest-spread']
                    }
                }
            },
            {
                test: /\.vue$/,
                use: ['vue-loader']
            }
        ],
    },
    resolve: {
        // import 文件时,可以不写后缀,在这里配置,但是我这里不写配置不写后缀也可以成功。
        extensions: ['.js', '.css', '.vue'],
        // alias: 别名, $:以vue为结尾的
        alias: {
            'vue$': 'vue/dist/vue.esm.js'
        }
    },
    plugins: [
        new webpack.BannerPlugin('最终版权归冯安晨所有!!!'),
        new HtmlWebpackPlugin({
            template: 'index.html'
        }),
        new uglifyJsPlugin()
    ],
    devServer: {
        contentBase: './dist',
        inline: true
    }
}
相关文章
|
23天前
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
23天前
|
前端开发 JavaScript
webpack 中 loader 和 plugin 的区别
在 webpack 中,loader 用于转换模块的源代码,如将 TypeScript 转为 JavaScript;而 plugin 则扩展了 webpack 的功能,可以执行更复杂的任务,如优化打包文件、注入环境变量等。两者共同作用于构建流程的不同阶段。
|
28天前
|
缓存 前端开发 JavaScript
Webpack与Babel的进阶配置与优化
通过以上的进阶配置和优化策略,可以更好地发挥`Webpack`与`Babel`的功能,提高项目的性能和开发效率。
|
1月前
|
JavaScript 前端开发 UED
如何配置 Webpack 进行代码分离?
通过以上方法,可以有效地配置Webpack进行代码分离,根据项目的具体需求和场景选择合适的方式,能够显著提高应用的性能和用户体验。在实际应用中,还可以结合其他优化技术,进一步优化Webpack的打包结果和应用的加载速度。
42 5
|
1月前
|
前端开发 JavaScript
webpack相关配置
以上只是Webpack配置的一些常见部分,实际应用中还可以根据具体的项目需求和场景进行更复杂和细致的配置,以满足不同的构建和优化要求。
38 2
|
1月前
|
缓存 JavaScript 前端开发
配置 Webpack 进行代码分离的常见方法有哪些?
通过以上常见方法,可以根据项目的具体需求和场景,灵活地配置Webpack进行代码分离,从而提高应用的性能和加载速度,优化用户体验。
30 3
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
52 6
|
1月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
72 7
|
1月前
|
前端开发
配置 Webpack 实现热更新
【10月更文挑战第23天】还可以进一步深入探讨热更新的具体实现细节、不同场景下的应用案例,以及如何针对特定需求进行优化等方面的内容。通过全面、系统地了解 Webpack 热更新的配置方法,能够更好地利用这一功能,提升项目的开发效率和性能表现。同时,要不断关注 Webpack 及相关技术的发展动态,以便及时掌握最新的热更新技术和最佳实践。
|
1月前
|
测试技术 开发者
如何确保 Webpack plugin 与其他插件的兼容性?
【10月更文挑战第23天】确保 Webpack plugin 与其他插件的兼容性需要从多个方面进行考虑和努力。通过遵循规范、进行充分测试、保持沟通协作等方式,