【利用AI让知识体系化】Webpack 相关配置技巧

news2024/10/6 6:50:14

在这里插入图片描述

文章目录

  • 章节一:了解 Webpack
    • Webpack 是什么?
    • 为什么使用 Webpack?
    • Webpack 的基本概念
    • Webpack 的核心概念和实现原理
  • 章节二:安装和配置 Webpack
    • 安装 Webpack
    • 配置 Webpack
    • Webpack 的常用配置项
  • 章节三:Webpack 的插件和加载器
    • Webpack 插件的作用和使用
    • Webpack 加载器的作用和使用
    • Webpack 常用插件和加载器的介绍和示例
      • 插件
        • HtmlWebpackPlugin
        • MiniCssExtractPlugin
        • CleanWebpackPlugin
      • 加载器
        • babel-loader
        • css-loader
        • url-loader
  • 章节四:Webpack 的优化和调试
    • Webpack 的优化技巧
      • 1. Tree-shaking
      • 2. Code splitting
      • 3. 按需加载
      • 4. 懒加载和预加载
      • 5. 压缩图片
      • 6. 长缓存优化
      • 7. 其他优化
    • Webpack 的调试技巧
      • 1. 使用 `source-map`
      • 2. 配置 `devServer`
      • 3. 使用 `webpack-bundle-analyzer`
  • 章节五:Webpack 和其他工具的结合
    • Webpack 和 Babel 的结合
    • Webpack 和 ESLint 的结合
    • Webpack 和 React 的结合
    • Webpack 和 Vue.js 的结合
  • 章节六:Webpack 的实战案例
    • Webpack 打包 React 应用程序
    • Webpack 打包 Vue.js 应用程序
    • Webpack 打包多页应用程序
    • Webpack 打包单页应用程序

章节一:了解 Webpack

Webpack 是什么?

Webpack 是一个现代化的 JavaScript 应用程序打包器,它主要用于打包前端代码资源,例如 JS 文件、CSS 文件、图片等,然后生成可以在浏览器中运行的静态资源。

Webpack 采用模块化的方式进行打包,可以将多个 JavaScript 模块合并成一个文件,减少 HTTP 请求,提升网站性能。同时,Webpack 支持各种类型的加载器和插件,可以通过加载器将 Webpack 能够理解的模块转换成浏览器能够识别的格式,通过插件进行各种任务的扩展,例如压缩代码、拷贝文件、生成 HTML 文件等等。

Webpack 已经成为当今前端项目构建领域中的主流工具,是现代前端项目必不可少的一环。

在这里插入图片描述

为什么使用 Webpack?

使用 Webpack 可以带来多方面的好处:

  1. 模块化开发Webpack 支持通过模块化的方式开发前端代码,通过将各种类型的文件都视为模块,使得代码更易于维护和扩展。

  2. 自动化构建Webpack 可以将多个文件打包成一个文件,从而减少 HTTP 请求,提升页面加载速度。同时,Webpack 还可以自动化执行各种任务,例如压缩代码、拷贝文件、生成 HTML 文件等等,简化了项目构建流程,提高了开发效率。

  3. 加载器和插件Webpack 支持各种类型的加载器和插件,从而可以使用各种工具和技术来处理资源文件,例如 Babel、CSS 预处理器、图像压缩等等,使得前端开发更加灵活多样。

  4. 易于集成Webpack 可以与各种框架和库无缝集成,例如 React、Vue.js、Angular 等等,提供了丰富的插件和加载器来支持这些框架和库。

综上,使用 Webpack 可以帮助前端开发者以更加高效和灵活的方式构建现代化的前端应用。

Webpack 的基本概念

Webpack 的基本概念包括:

  1. 入口(entry)Webpack 通过入口来指定打包的起点,在打包过程中会分析入口及其依赖的模块,生成相应的输出文件。

  2. 输出(output)Webpack 通过输出来指定打包生成的输出文件的位置和名称等信息。

  3. 加载器(loader)Webpack 通过加载器来处理资源文件,例如将 ES6 代码转换成 ES5 代码、处理 CSS 文件、压缩图像等等。

  4. 插件(plugin)Webpack 通过插件来扩展其功能,例如压缩代码、生成 HTML 文件、拷贝静态文件等等。

  5. 模式(mode)Webpack 通过模式来指定打包的模式,可以选择 developmentproduction 或者 none 等模式。

  6. 打包器(bundle)Webpack 将所有的代码和依赖打包成一个或者多个 bundle,集中管理和部署这些 bundle 可以有效地提升网站性能。

  7. 负载器(loader)和插件(plugin)的组合Webpack 通过将不同的负载器(loader)和插件(plugin)组合来处理不同类型的资源,例如处理 JS 文件、处理 CSS 文件、处理图片等等。

总的来说,掌握这些基本概念可以有效地理解并使用 Webpack 进行前端项目构建。

Webpack 的核心概念和实现原理

Webpack 的核心概念包括模块、依赖图和 Chunk。

  1. 模块:在 Webpack 中,一切都可以视为模块,包括 JS 文件、CSS 文件、图片等等。模块是 Webpack 打包的基本单位。每个模块都有一个唯一的标识符,可以通过这个标识符来区分不同的模块。

  2. 依赖图:在 Webpack 的打包过程中,每个模块都可能依赖于其他的模块,从而构成了一个依赖图。Webpack 会根据这个依赖图来确定每个模块在打包中的顺序。

  3. Chunk:在 Webpack 的打包过程中,多个模块可能会被合并成一个或多个 Chunk。这些 Chunk 包含了被合并的模块及其依赖的其他模块。ChunkWebpack 打包后,会生成对应的静态文件,可以在浏览器中运行。

实现原理:

Webpack 的打包过程分为以下几个步骤:

  1. 解析配置文件Webpack 会首先通过配置文件中的配置信息来确定入口和输出文件的相关设置。

  2. 解析入口模块Webpack 会根据入口模块的路径,解析出这个模块及其依赖的其他模块。

  3. 解析模块依赖Webpack 会递归地对每个模块的依赖进行解析,找出所有的依赖模块。

  4. 加载模块Webpack 会根据配置文件中的定义和模块的类型,使用相应的加载器来加载模块。

  5. 转换模块Webpack 会根据配置文件中的定义,使用相应的转换器来对模块进行转换,例如将 ES6 代码转换成 ES5 代码、处理 CSS 文件、压缩图像等等。

  6. 打包模块Webpack 会根据模块之间的依赖关系,将模块打包成一个或多个 Chunk

  7. 输出文件Webpack 会将打包好的 Chunk 输出到指定的输出目录中,生成可以在浏览器中运行的静态文件。

总的来说,Webpack 的实现原理是基于模块之间的依赖关系,通过解析模块的路径、加载模块的内容、转换模块的代码和打包模块成 Chunk 等一系列的步骤来实现前端项目的构建。

章节二:安装和配置 Webpack

安装 Webpack

要安装 Webpack,首先你需要在你的系统上安装 Node.jsnpm(Node Package Manager)。

Node.js 可以在官网 https://nodejs.org/en/ 上下载并安装。

安装完成后,可以在终端中使用以下命令来检查 Node.js 和 npm 的版本:

node -v
npm -v

安装完成 Node.js 和 npm 之后,可以使用 npm 来安装 Webpack。在终端中进入你的项目目录下,执行以下命令来安装 Webpack:

npm install webpack webpack-cli --save-dev

其中, --save-dev 参数表示将 Webpack 安装为开发依赖。安装完成后,你可以在项目中使用 Webpack 进行打包。

配置 Webpack

Webpack 的配置文件通常命名为 webpack.config.js,这个文件位于项目的根目录下,用于配置 Webpack 的各种选项。

一个最基本的 Webpack 配置文件如下:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

这个配置文件设置了入口文件为 ./src/index.js,输出文件的路径为 ./dist/main.js

在这个配置文件中,我们使用了 Node.js 的模块系统,引入了 Node.js 中的 path 模块,并在 output 中使用了 path.resolve() 函数来设置输出文件路径。该函数根据传入的路径参数生成绝对路径,确保输出文件的路径始终是绝对路径。

你可以根据你的项目需要,添加各种配置选项,例如设置 Loader,启用插件等等。

以下是一个典型的 Webpack 配置文件示例:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'production',
  entry: '/src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset/resource',
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
      filename: './index.html',
    }),
    new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css',
    }),
  ],
}

在这个配置文件中,我们启用了 production 模式,并配置了三个 Loaders 和两个插件:

  • 对于 JavaScript 文件,使用了 Babel 来处理 ES6/7 转 ES5,并剔除不需要的语法和代码。
  • 对于 CSS 文件,使用了 MiniCssExtractPlugin 来将 CSS 提取为单独的文件并进行压缩。
  • 对于图片等资源文件,使用了 Asset Modules 将文件转换为 data URI 或保存为文件,取决于文件大小。

我们还使用了 HtmlWebpackPluginMiniCssExtractPlugin 插件,用于生成 HTML 文件和 CSS 文件。

以上示例中只是几个简单的配置示例,Webpack 功能非常强大,具体配置要根据项目需求来设置。

Webpack 的常用配置项

Webpack 的配置项非常多,以下是一些常用的配置项:

  1. mode:指定打包模式,可以设置为 developmentproductionnone

  2. entry:指定打包入口文件的路径,可以是字符串、数组或对象形式。

  3. output:指定输出文件的路径和名称等信息,例如设置 filenamepath 等。

  4. module.rules:指定使用的 Loader,告诉 Webpack 在遇到特定文件时需要使用哪些 Loader 进行转换。

  5. plugins:指定使用的插件,例如 Html-webpack-plugin、Clean-webpack-plugin 等。

  6. resolve:用于指定模块的解析方式,可以设置 alias、extensions 等选项。

  7. devServer:提供了一个开发服务器,可以实现代码修改后自动编译和浏览器热更新等功能。

  8. optimization:用于设置代码优化选项,例如压缩代码、去除重复代码等。

  9. externals:在打包的过程中,指定哪些库应该从外部引入,而不是被打包到代码中。

  10. performance:用于配置打包性能优化选项,例如控制提示大小限制、内存等。

以上只是常见的一些选项,具体配置项还要根据项目需求进行设置。

总的来说,Webpack 提供了非常灵活和丰富的配置选项,可根据不同需求对打包过程进行微调。

章节三:Webpack 的插件和加载器

Webpack 插件的作用和使用

Webpack 的插件可以用于完成更加灵活的操作,例如压缩代码、打包优化、生成 HTML 等。

Webpack 插件机制基于事件触发,当事件回调成功执行之后,插件会被调用执行对应任务。

以下是几个常用的插件及其作用:

  1. HtmlWebpackPlugin:用于自动生成 HTML 文件,并将入口文件和生成的 JavaScript 文件自动关联起来,生成的 HTML 文件会自动添加 script 标签引入 JavaScript 文件。

  2. MiniCssExtractPlugin:用于将 CSS 文件从 JavaScript 中提取出来,并合并成一个单独的 CSS 文件,减小 JavaScript 文件的体积。

  3. UglifyJsPlugin:用于压缩 JavaScript 文件,去除注释和空格等无用内容,减小文件体积。

  4. CleanWebpackPlugin:用于删除打包文件夹中的文件,便于下一次打包时重新生成文件。

使用插件的方法也很简单,在 webpack.config.js 中可以创建插件实例并在 plugins 中使用,示例如下:

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

module.exports = {
  // ...
  plugins: [
    new HtmlWebpackPlugin({
      title: 'My App',
      filename: 'index.html',
      template: 'src/index.html',
    }),
    // ...
  ],
};

在这个示例中,我们使用了 HtmlWebpackPlugin,并在 plugins 中创建了一个新的 Html-webpack-plugin 实例。它通过指定 titlefilenametemplate 等选项,自动创建一个新的 HTML 文件,并自动引入打包输出的 JavaScript 文件。

同时,Webpack 也提供了许多其他的插件和 Loader,开发者可以按照自己的需要,引入和使用不同的插件。

Webpack 加载器的作用和使用

Webpack 加载器用于处理在 Webpack 中加载和转换非 JavaScript 文件为 JavaScript,例如将 ES6/7 转换成 ES5、将 CSS 文件转换成 JavaScript 对象等。

Webpack 加载器允许你通过自定义转换器的方式方便地将非 JavaScript 文件转换为 Webpack 可以理解的模块。

以下是几个常用的 Webpack 加载器以及它们的作用:

  1. babel-loader:用于将 ES6/7/8 转换为 ES5 语法。需与 Babel 配合使用。

  2. css-loader:用于处理 CSS 文件,将 CSS 转化为 JavaScript 对象,并注入到 HTML 中。

  3. less-loader:用于将 Less 文件转换成 CSS,需要先安装 Less。

  4. file-loader:用于将文件和图片转换成 base64 URL 或文件的输出路径,再返回一个包含该文件 URL 的 JavaScript 模块。

  5. url-loader:与 file-loader 类似,但是在文件大小(单位 byte)低于指定的限制时,可以返回源文件的 base64 URL。当文件大小超过限制时,使用 file-loader 将文件输出到指定的目录。

使用加载器的方法也很简单,在 webpack.config.js 中可以添加 module.rules 打包规则,示例如下:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset/resource',
      },
    ],
  },
};

在这个示例中,我们创建了三个加载器:

  • babel-loader:用于处理 .js 文件,将 ES6/7/8 语法转换成 ES5 语法。
  • css-loader:用于处理 .css 文件,将 CSS 文件转换成 JavaScript 对象,并注入到 HTML 中。
  • asset/resource:用于处理图像文件,将文件转换成 base64 URL 或输出文件的路径,并返回一个包含该文件 URL 的 JavaScript 模块。

module.rules 中,每个规则是一个包含 testexcludeincludeloader 等属性的对象,其中 test 用于匹配需要处理的文件类型,loader 用于指定要使用的加载器。

Webpack 常用插件和加载器的介绍和示例

Webpack 提供了非常多的插件和加载器,以下简单介绍几个常见的插件和加载器并给出示例。

插件

HtmlWebpackPlugin

自动生成 HTML 文件,并将 JavaScript 文件自动插入其中。

安装:

npm install --save-dev html-webpack-plugin

示例:

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

module.exports = {
  // ...
  plugins: [
    new HtmlWebpackPlugin({
      title: 'My App',
      template: 'src/index.html'
    })
  ]
};

MiniCssExtractPlugin

将 CSS 文件提取为一个单独的文件,减小 JavaScript 文件的体积。

安装:

npm install --save-dev mini-css-extract-plugin

示例:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      },
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css'
    })
  ]
};

CleanWebpackPlugin

用于清空之前生成的打包文件夹。

安装:

npm install --save-dev clean-webpack-plugin

示例:

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

module.exports = {
  // ...
  plugins: [
    new CleanWebpackPlugin()
  ]
};

加载器

babel-loader

用于将 ES6/7/8 转换为 ES5 语法。

安装:

npm install --save-dev babel-loader @babel/core @babel/preset-env

示例:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: /node_modules/
      }
    ]
  }
};

css-loader

用于处理 CSS 文件,将 CSS 转化为 JavaScript 对象,并注入到 HTML 中。

安装:

npm install --save-dev css-loader style-loader

示例:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  }
};

url-loader

与 file-loader 类似,但是在文件大小(单位 byte)低于指定的限制时,可以返回源文件的 base64 URL。当文件大小超过限制时,使用 file-loader 将文件输出到指定的目录。

安装:

npm install --save-dev url-loader

示例:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.(png|gif|jpg|jpeg)$/i,
        type: 'asset',
        parser: {
          dataUrlCondition: {
            maxSize: 1024 * 10,
          },
        },
      },
    ]
  }
};

这个示例中,我们将图片文件转换为 base64 URL,但仅当文件大小不超过 10KB 时才会执行转换。当文件大小超过 10KB 时,使用 file-loader 将文件输出到指定的目录。通过设置传递给 type: 'asset'的选项,可以方便地控制如何转换文件。

章节四:Webpack 的优化和调试

Webpack 的优化技巧

Webpack 优化可以从以下几个方面入手:

  1. 缩小打包体积,以加快网页加载速度。

  2. 减少不必要的模块和文件的打包,以缩短打包时间。

  3. 使用合适的插件和工具,以简化打包过程和优化打包结果。

以下是一些常见的Webpack 优化技巧:

1. Tree-shaking

Tree-shaking 是指通过消除 JavaScript 中没有使用的代码,来优化打包体积。Tree-shaking 通常用于优化 ES6 模块引入,并依赖于 JavaScript 解析器的一些特性。

可以使用 Webpack 自带的 UglifyJsPluginTerserPlugin 来压缩和混淆代码。

2. Code splitting

Code splitting 是指将一个大文件分割成多个小文件以提高加载速度。Webpack 支持多种方式实现 Code splitting,包括使用 splitChunksimport() 或动态 import() 等方式。

3. 按需加载

按需加载(lazy loading)是指当页面需要使用某个模块时,再进行加载。可以通过使用 import() 或动态 import() 来实现按需加载。

4. 懒加载和预加载

懒加载是指在初始化时只加载必要的代码,而将其余代码推迟到稍后进行加载。这样可以大大减少初始的加载时间和资源消耗。预加载是指在该资源可能被需要前,提前加载该资源,以便下一步的使用。在 Webpack 中,可以使用 import() 或动态 import() 来实现懒加载和预加载。

5. 压缩图片

压缩图片可以减小图片的大小,降低加载时间和流量消耗。可以使用 Webpack 的 image-webpack-loaderurl-loaderfile-loader 等加载器和插件来进行图片压缩。

6. 长缓存优化

为避免浏览器在每次请求时都重新加载资源,可以添加长缓存标识符来让浏览器缓存这些资源。可以使用 Webpack 的 output.filenameoutput.chunkFilename 来配置打包输出的文件名,并使用 hashchunkhashcontenthash 等变量来区分不同版本的文件。

7. 其他优化

  • 减少依赖模块的数量

  • 使用缓存

  • 删除无用代码

  • 缩短路径引用

以上优化技巧可以结合实际需求进行采用。 Webpack 提供了很多优化工具和插件,可以针对具体项目进行配置。

Webpack 的调试技巧

对于开发过程中的 Webpack 应用程序调试,可以使用以下技巧:

1. 使用 source-map

在 Webpack 中,使用 devtool 配置选项可以生成 source-map 文件。这样可以使打包后的代码与原始代码之间建立关联,方便在浏览器开发者工具中进行调试。

示例:

module.exports = {
  // ...
  devtool: 'source-map'
};

2. 配置 devServer

使用 webpack-dev-server 可以提高开发效率,并方便进行调试。可以配置 devServer 来启用开发服务器,允许在本地测试应用程序并实现热更新。

示例:

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

module.exports = {
  // ...
  devServer: {
    contentBase: './dist',
    hot: true
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'My App',
      template: 'src/index.html'
    }),
    new webpack.HotModuleReplacementPlugin()
  ]
};

devServer 配置选项可以指定开发服务器的常用配置选项,例如指定服务器内容存放目录、热更新开关等。在这个例子中,我们使用了 webpack-dev-serverHtmlWebpackPluginHotModuleReplacementPlugin,其中 HotModuleReplacementPlugin 用于启用热更新。

3. 使用 webpack-bundle-analyzer

webpack-bundle-analyzer 是一个 Webpack 插件,可以将打包生成的文件以可视化方式展示,查看应用程序中包含的哪些模块占用了大量空间,方便进行调试。

安装:

npm install --save-dev webpack-bundle-analyzer

示例:

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  // ...
  plugins: [
    new BundleAnalyzerPlugin()
  ]
}

在 Webpack 配置中添加 BundleAnalyzerPlugin 插件,然后运行 Webpack,会在浏览器中打开一个页面来展示可视化结果。

除了上述技巧,还可以使用 Chrome 开发者工具的调试工具和插件来进行调试。例如,使用 SourceMap 插件将打包后的源代码映射到开发代码中,同时使用 React Developer Tools 查看 React 组件的工作原理等。

章节五:Webpack 和其他工具的结合

Webpack 和 Babel 的结合

WebpackBabel 可以结合使用来处理用 ES6 / ES2015+ 编写的 JavaScript 代码,使其可以在现代浏览器中运行。

Babel 是一个 JavaScript 编译器,它支持将 ES6 / ES2015+ 转换成 ES5 语法,用于在旧版浏览器中运行。

Webpack 可以使用 Babel 加载器(babel-loader)来解析和编译 JavaScript 代码。通过使用 WebpackBabel,可以使用 ES6 / ES2015+ 特性来编写 JavaScript 代码,并将其转换为可以在所有浏览器中运行的代码。

以下是一个简单的使用 Webpack 和 Babel 的例子:

// webpack.config.js

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              ['@babel/preset-env', {
                targets: 'last 2 versions, ie >= 11'
              }]
            ]
          }
        }
      }
    ]
  }
};

在这个例子中,webpack.config.js 中使用了 Babel 加载器来解析和编译 JavaScript 代码。具体来说,当 Webpack 遇到 .js 文件时,babel-loader 被应用于该文件,用于将 ES6 / ES2015+ 转换成 ES5 语法。在 options 中,我们配置了 Babel @babel/preset-env,并将目标浏览器定为“最近的两个版本和 IE11 及以上版本”。

需要注意的是,在使用 Babel 转换代码之前,需要先安装 babel-loader 和相关的 Babel 插件和预设。此外,为了使用 Webpack,还需要在 webpack.config.js 文件中进行相应的配置,例如设置入口和出口文件、指定打包模式等。

当然,如果您使用的是 Create React App 这类的脚手架工具,他们可能已经提供了集成好了 Webpack 和 Babel 的配置,您只需要简单地添加相关的代码即可进行使用。

Webpack 和 ESLint 的结合

Webpack 和 ESLint 可以结合使用来进行代码风格检查和语法检查,帮助开发者保证代码的质量和一致性。

以下是一个简单的使用 Webpack 和 ESLint 的例子:

// webpack.config.js

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          'babel-loader',
          'eslint-loader'
        ]
      }
    ]
  },
  // ...
};

在这个例子中,我们配置了 Webpack,在遇到 .js 文件时,首先使用 Babel 加载器来将 ES6/ES2015+ 转换成 ES5 语法,然后使用 ESLint 加载器来检查代码的语法和风格。可以通过简单的配置来自定义 ESLint 的规则、运行方式等。

需要注意的是,在使用 ESLint 进行代码检查之前,需要先安装 eslint 和相关的插件和配置文件。此外,在 webpack.config.js 文件中进行相应的配置,例如配置规则、忽略文件等。

当然,如果您使用的是 Create React App 这类的脚手架工具,他们可能已经提供了集成好了 ESLint 的配置,您只需要在 .eslintrc 文件中将检查规则配置为您需要的即可。

Webpack 和 React 的结合

Webpack 和 React 可以结合使用来构建 React 应用程序。

以下是一个简单的使用 Webpack 和 React 的例子:

// webpack.config.js

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

module.exports = {
  entry: './src/index.jsx',
  output: {
    filename: 'bundle.js'
  },
  resolve: {
    extensions: ['.js', '.jsx']
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: 'public/index.html'
    })
  ]
};

在这个例子中,我们使用了 Webpack 来打包一个 React 应用程序。在 entry 配置中,指定了应用程序的入口文件,即 src/index.jsx。在 output 配置中,指定了打包后的输出文件名和路径。在 resolve 配置中,指定了可以省略的文件扩展名,使得在引用模块时可以省略后缀。

module 配置中,我们使用了 Babel 加载器来解析和编译 JavaScript 代码。在 plugins 配置中,使用了 HtmlWebpackPlugin 来生成 index.html 文件,该文件会自动将打包后的 JavaScript 文件插入到 HTML 中。需要注意的是,在使用 Babel 转换代码之前,需要先安装相关的插件和预设。

在 React 应用程序中,通常会使用组件来构建页面。下面是一个简单的 Hello World 组件的例子:

// src/components/HelloWorld.jsx

import React from 'react';

const HelloWorld = ({ name }) => {
  return (
    <div>
      <h1>Hello, {name}!</h1>
    </div>
  );
};

export default HelloWorld;

接下来,我们可以在一个入口文件中将该组件渲染到页面上:

// src/index.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import HelloWorld from './components/HelloWorld';

ReactDOM.render(
  <HelloWorld name="Webpack" />,
  document.getElementById('root')
);

在这个例子中,我们在入口文件中引入了 HelloWorld 组件,并使用 ReactDOM.render 方法将其渲染到页面上。

最后,使用 npm start 命令可以启动 Webpack,开发服务器会自动启动并监听文件变化,当对应的组件或者页面代码发生变化时,页面会实时更新。

Webpack 和 Vue.js 的结合

Webpack 和 Vue.js 可以结合使用来构建 Vue.js 应用程序。

以下是一个简单的使用 Webpack 和 Vue.js 的例子:

// webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js'
  },
  resolve: {
    extensions: ['.js', '.vue']
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: 'public/index.html'
    }),
    new VueLoaderPlugin()
  ]
};

在这个例子中,我们使用了 Webpack 来打包一个 Vue.js 应用程序。在 entry 配置中,指定了应用程序的入口文件,即 src/main.js。在 output 配置中,指定了打包后的输出文件名和路径。在 resolve 配置中,指定了可以省略的文件扩展名,使得在引用模块时可以省略后缀。

module 配置中,我们使用了 Vue.js 和 Babel 加载器来解析和编译 JavaScript 代码和 Vue 组件。在 plugins 配置中,使用了 HtmlWebpackPlugin 来生成 index.html 文件,并使用了 VueLoaderPlugin 来正确解析 Vue 组件。

在 Vue 应用程序中,我们通常会使用单文件组件来构建页面。下面是一个简单的 Hello World 组件的例子:

<!-- src/components/HelloWorld.vue -->

<template>
  <div>
    <h1>Hello, {{ name }}!</h1>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    name: String
  }
};
</script>

接下来,我们可以在一个入口文件中将该组件渲染到页面上:

// src/main.js

import Vue from 'vue';
import HelloWorld from './components/HelloWorld.vue';

new Vue({
  el: '#app',
  components: { HelloWorld },
  data: {
    name: 'Webpack'
  },
  template: '<HelloWorld :name="name" />'
});

在这个例子中,我们在入口文件中引入了 HelloWorld 组件,并使用 Vue 实例将其渲染到页面上。需要注意的是,在使用 Babel 转换代码之前,需要先安装相关的插件和预设。

最后,使用 npm start 命令可以启动 Webpack,开发服务器会自动启动并监听文件变化,当对应的组件或者页面代码发生变化时,页面会实时更新。

章节六:Webpack 的实战案例

Webpack 打包 React 应用程序

要将 React 应用程序打包成一个可部署的代码包,可以使用 Webpack。

以下是一个简单的使用 Webpack 打包 React 应用程序的例子:

首先需要安装相关的依赖项:

npm install react react-dom
npm install babel-core babel-loader babel-preset-env babel-preset-react
npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D

接着,创建一个配置文件 webpack.config.js,配置入口文件、输出文件、加载器等信息:

// webpack.config.js

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

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react']
          }
        }
      },
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ]
};

在这个例子中,我们指定了入口文件为 src/index.js,输出文件为 dist/bundle.js。在 module 配置中,我们使用了 Babel 加载器来解析和编译 React 组件及其依赖文件。同时,我们也使用了 CSS 加载器来加载 CSS 文件。在 plugins 配置中,使用了 HtmlWebpackPlugin 来生成 index.html 文件,该文件会自动将打包后的 JavaScript 文件插入到 HTML 中。

接着,我们需要创建一个入口文件 src/index.js,并在其中引入 React 组件并将其渲染到页面上:

// src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/App';

ReactDOM.render(<App />, document.getElementById('root'));

在这个例子中,我们引入了 App 组件并使用 ReactDOM.render() 方法将其渲染到页面上。需要注意的是,在运行应用程序之前,还需要在 HTML 文件中添加一个与 ReactDOM.render() 方法中指定的 id 相匹配的容器元素。

现在可以在终端运行 webpack 命令打包应用程序,打包后的文件将输出到 dist/bundle.js 文件中。可以通过简单的开发服务器进行测试:

// package.json

{
  "scripts": {
    "start": "webpack-dev-server --open",
    "build": "webpack"
  }
}

现在可以使用 npm start 命令来启动开发服务器,自动打开浏览器并在其中运行应用程序。在修改代码后,可以看到浏览器会自动实时更新。如果需要打包则运行 npm run build 命令。

Webpack 打包 Vue.js 应用程序

要将 Vue.js 应用程序打包成一个可部署的代码包,也可以使用 Webpack。

以下是一个简单的使用 Webpack 打包 Vue.js 应用程序的例子:

首先需要安装相关的依赖项:

npm install vue vue-template-compiler
npm install babel-core babel-loader babel-preset-env babel-plugin-transform-runtime
npm install webpack webpack-cli webpack-dev-server html-webpack-plugin vue-loader vue-style-loader css-loader less-loader less -D

接着,创建一个配置文件 webpack.config.js,配置入口文件、输出文件、加载器等信息:

// webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
            plugins: ['transform-runtime']
          }
        }
      },
      {
        test: /\.css$/,
        use: ['vue-style-loader', 'css-loader']
      },
      {
        test: /\.less$/,
        use: ['vue-style-loader', 'css-loader', 'less-loader']
      }
    ]
  },
  plugins: [
    new VueLoaderPlugin(),
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ]
};

在这个例子中,我们指定了入口文件为 src/main.js,输出文件为 dist/bundle.js。同时,我们还使用了 Vue.js 相关的加载器,以及 Babel 加载器和 CSS 加载器进行编译。在 plugins 配置中,使用了 VueLoaderPlugin 来正确解析 Vue 组件,并使用了 HtmlWebpackPlugin 来生成 index.html 文件,该文件会自动将打包后的 JavaScript 文件插入到 HTML 中。

接着,我们需要创建一个入口文件 src/main.js,并在其中创建一个 Vue 实例并挂载到页面上:

// src/main.js

import Vue from 'vue';
import App from './App.vue';

new Vue({
  render: h => h(App),
}).$mount('#app');

在这个例子中,我们引入了 App 组件并创建了一个 Vue 实例,并使用 render 方法将其挂载到页面上。

现在可以在终端运行 webpack 命令打包应用程序,打包后的文件将输出到 dist/bundle.js 文件中。可以通过简单的开发服务器进行测试:

// package.json

{
  "scripts": {
    "start": "webpack-dev-server --open",
    "build": "webpack"
  }
}

现在可以使用 npm start 命令来启动开发服务器,自动打开浏览器并在其中运行应用程序。在修改代码后,可以看到浏览器会自动实时更新。如果需要打包则运行 npm run build 命令。

Webpack 打包多页应用程序

Webpack 可以用来打包多页应用程序。多页应用程序与单页应用程序不同,其由多个 HTML 页面组成,每个页面都有着自己独立的 JavaScript 和 CSS 文件。

以下是一个简单的使用 Webpack 打包多页应用程序的例子:

首先需要创建多个 HTML 页面,并在其中引入对应的 JavaScript 和 CSS 文件。例如,我们创建两个页面 home.htmlabout.html

<!-- home.html -->

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Home Page</title>
  </head>
  <body>
    <h1>Welcome to the Home Page!</h1>
    <script src="home.js"></script>
  </body>
</html>
<!-- about.html -->

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>About Page</title>
  </head>
  <body>
    <h1>About Us</h1>
    <script src="about.js"></script>
  </body>
</html>

在这个例子中,我们分别创建了 home.htmlabout.html 两个页面,而每个页面都包含一个对应的 JavaScript 文件。

接着,创建一个配置文件 webpack.config.js,配置入口文件、输出文件、加载器等信息:

// webpack.config.js

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

module.exports = {
  entry: {
    home: './src/home.js',
    about: './src/about.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: 'src/home.html',
      filename: 'home.html',
      chunks: ['home']
    }),
    new HtmlWebpackPlugin({
      template: 'src/about.html',
      filename: 'about.html',
      chunks: ['about']
    })
  ]
};

在这个例子中,我们指定了入口文件为两个 JavaScript 文件 home.jsabout.js,输出文件为 dist/home.jsdist/about.js。在 module 配置中,我们使用了 Babel 加载器来解析和编译 JavaScript 代码。在 plugins 配置中,使用了 HtmlWebpackPlugin 来生成对应的 HTML 文件,并且指定了对应的 JavaScript 文件。

接着,创建两个 JavaScript 文件 home.jsabout.js,并在其中编写对应的脚本:

// home.js

console.log('This is the home page.');

// about.js

console.log('This is the about page.');

在这个例子中,我们分别在不同的 JavaScript 文件中编写对应的脚本。

现在可以在终端运行 webpack 命令打包应用程序,打包后的文件将输出到 dist 文件夹中。可以通过简单的开发服务器进行测试:

// package.json

{
  "scripts": {
    "start": "webpack-dev-server --open",
    "build": "webpack"
  }
}

现在可以使用 npm start 命令来启动开发服务器,自动打开浏览器并在其中运行应用程序。在修改代码后,可以看到浏览器会自动实时更新。如果需要打包则运行 npm run build 命令。

Webpack 打包单页应用程序

要将单页应用程序打包成一个可部署的代码包,可以使用 Webpack。以下是一个简单的使用 Webpack 打包单页应用程序的例子:

首先需要安装相关的依赖项:

npm install react react-dom react-router-dom
npm install babel-core babel-loader babel-preset-env babel-preset-react
npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D

接着,创建一个配置文件 webpack.config.js,配置入口文件、输出文件、加载器等信息:

// webpack.config.js

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

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react']
          }
        }
      },
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ],
  devServer: {
    historyApiFallback: true
  }
};

在这个例子中,我们指定了入口文件为 src/index.js,输出文件为 dist/bundle.js。在 module 配置中,我们使用了 Babel 加载器来解析和编译 React 组件及其依赖文件。同时,我们也使用了 CSS 加载器来加载 CSS 文件。在 plugins 配置中,使用了 HtmlWebpackPlugin 来生成 index.html 文件,该文件会自动将打包后的 JavaScript 文件插入到 HTML 中。

其中,devServer 增加了 historyApiFallbacktrue ,这是因为嵌入到HTML页面的SPA应用程序通常依赖于 HTML5 的 history 模式(如 React router),因此,需要将所有请求都指向 index.html,以防止路由错误。

接着,我们需要创建一个入口文件 src/index.js,并在其中创建一个根组件并挂载到页面上

// src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './components/Home';
import About from './components/About';
import NotFound from './components/NotFound';
import './index.css';

const App = () => {
  return (
    <Router>
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route component={NotFound} />
      </Switch>
    </Router>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));

在这个例子中,我们引入了 HomeAboutNotFound 三个组件,并使用 BrowserRouter 以及 RouteSwitch 组件来实现页面路由。需要注意的是,在运行应用程序之前,还需要在 HTML 文件中添加一个与 ReactDOM.render() 方法中指定的 id 相匹配的容器元素。

现在可以在终端运行 webpack 命令打包应用程序,打包后的文件将输出到 dist/bundle.js 文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/618070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业应该如何选择适合自己的直播平台?

企业应该如何选择适合自己的直播平台&#xff1f;本文将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑&#xff0c;帮助您做出明智的决策&#xff0c;或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因素&#xff1a; 1. 企…

2023/6/6总结

CSS 如果想要实现背景颜色渐变效果&#xff1a; left是从左边开始&#xff0c;如果想要对角线比如&#xff0c;左上角就是left top&#xff0c;渐变效果始终是沿着一条线来实现的。 下面是跟着视频教学用flex布局写的一个移动端网页&#xff1a; html代码&#xff1a; <!…

chatgpt赋能python:Python字符串:去除\n的方法和应用

Python字符串&#xff1a;去除\n的方法和应用 在Python编程中&#xff0c;字符串是非常常用的数据类型。在文本处理中&#xff0c;经常会遇到需要去除多余的换行符&#xff08;\n&#xff09;的情况。本文将介绍Python中去除\n的方法以及在实际应用中的使用。 方法一&#xf…

第六十七天学习记录:对陈正冲编著《C 语言深度解剖》中关于变量命名规则的学习

最近开始在阅读陈正冲编著的《C 语言深度解剖》&#xff0c;还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中&#xff0c;偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知…

chatgpt赋能python:Python安装和打开教程

Python安装和打开教程 Python作为一种高效、灵活、易学易用的编程语言&#xff0c;越来越受到广大程序员的青睐&#xff0c;越来越多的人想要学习Python。在学习Python之前&#xff0c;首先要进行Python的安装和打开。那么&#xff0c;本篇文章将为您介绍如何安装和打开Python…

为什么需要 git 和 相关的小知识

为什么需要git和相关的小知识 先看一个实际需求&#xff0c;引出Git 问题: 公司五一活动计划 ● 先说一个最简单的情况&#xff0c;比如你做了公司五一活动计划书(如图) 解决方案: 版本管理工具(Git) 一句话: Git 是目前最流行的分布式版本控制软件 Git 是怎么来的? Git…

读数据压缩入门笔记04_统计编码

1. 统计编码&#xff08;statistical encoders&#xff09;的算法 1.1. 每种编码方法都对每个符号的概率分布做了不同的假定 1.2. 需要处理的数据集中符号的概率分布与现有的VLC方法都不能完全匹配 1.3. 统计编码算法通过数据集中符号出现的概率来进行编码使结果尽可能与熵接…

【音视频开发】FFmpeg转换与封装 I - MP4格式

1 FFmpeg转换与封装 1.1 MP4格式转换 1.1.1 MP4格式标准 1 FFmpeg转换与封装 FFmpeg支持的媒体封装格式具有多样性与全面性&#xff0c;与此&#xff0c;我们还可以使用FFmpeg来对媒体格式进行转换与封装。 1.1 MP4格式转换 在互联网常见的格式中&#xff0c;跨平台最好的应…

【Vue】二:Vue核心处理---vue的其它指令和自定义指令

文章目录 1.vue的其它指令1.1v-text 和 v-html1.2 v-cloak1.3 v-once1.4 v-pre 2. 自定义指令2.1 函数式2.2 对象式2.3.定义全局的指令 1.vue的其它指令 1.1v-text 和 v-html v-text&#xff1a;当做文件解析。 v-html&#xff1a;当做 HTML 代码解析。 1.2 v-cloak v-cloa…

chatgpt赋能python:Python字典通过键找值:什么是Python字典?

Python字典通过键找值&#xff1a;什么是Python字典&#xff1f; Python字典是一种非常有用的数据类型&#xff0c;可以通过键值对方式存储和访问数据。它是Python的一种内置数据类型&#xff0c;可以在编程中非常方便地存储和操作数据。 Python字典可以存储任意类型的数据&a…

图书馆智能照明控制系统设计介绍 安科瑞 许敏

摘 要&#xff1a;简要介绍了一种新型的智能照明控制系统&#xff0c;论述了其系统特点和系统组成&#xff1b;结合该系统对某高校图书馆进行了照明节能设计。工程应用表明&#xff0c;该系统在公 共建筑节能中效果显著。 关键词&#xff1a;高校&#xff1b;图书馆&#xff…

【SpinalHDL快速入门】5.1、SpinalHDL组织结构之Component和hierarchy

文章目录 1.1、简介1.2、Input / output 定义1.3、修剪信号&#xff08;Pruned signals&#xff09;1.4、参数化硬件&#xff08;在Verilog中称为“Parameter”&#xff09;1.5、合成组件名称 1.1、简介 就像在 VHDL 和 Verilog 中一样&#xff0c;可以定义组件以用于构建设计…

Tableau招聘信息数据可视化

获取的招聘信息数据为某招聘网站发布的大数据及数据分析相关岗位&#xff0c;对其他计算机相关岗位的招聘信息数据分析也有一定的参考价值。因为所获取的招聘信息数据数量只有1万左右&#xff0c;实际的招聘信息数量肯定不止1万&#xff0c;所以可能会与实际信息有一定的误差。…

chatgpt赋能python:Python安装Gurobi优化器详细步骤

Python安装Gurobi优化器详细步骤 如果你是一个数据科学家或者运筹学专业的研究者&#xff0c;你肯定会经常接触到优化问题。Gurobi是一个流行的线性与整数规划优化软件包&#xff0c;它提供了出色的线性规划和整数规划支持&#xff0c;速度快&#xff0c;准确度高&#xff0c;…

nginx(八十三)error_page、proxy_intercept_errors深究

一 error_page和proxy_intercept_errors深究 强调&#xff1a; 本文只是基于状态码的角度来讨论error_page、proxy_intercept_errors差异性题外话&#xff1a; 让别人定位,一定要保留好事故现场,尽可能的提供更多的有用信息核心&#xff1a; 本文只讨论错误状态码的异常处理遗…

信息系统设计与分析

系统分析师作用 1. 业务需求 现有组织结构、组织目标、管理模式 部门业务、业务流程、业务规则 业务数据、业务过程与业务管理直接关系 业务优化与业务再造要求 2. 用户需求分析 新系统改进业务要求 对新系统的愿景与期望 对新系统使用要求 3. 系统需求分析 系统应具有哪些功能…

【JavaSE】Java(五十三):核心要点总结

文章目录 1. 简要说下什么是反射2. 什么是java序列化&#xff0c;什么情况下需要序列化3. 为什么需要克隆&#xff0c;如何实现克隆&#xff0c;深拷贝和浅拷贝区别4. throw 和 throws 区别5. final、finaly、finalize 区别 1. 简要说下什么是反射 Java反射是指在运行时获取类信…

chatgpt赋能python:Python安装dialog介绍

Python安装dialog介绍 Dialog是一个命令行工具&#xff0c;可以帮助用户在Linux系统中创建自定义对话框。它可以与多种编程语言一起使用&#xff0c;其中包括Python。在本文中&#xff0c;我们将详细介绍如何在Python中安装Dialog。 安装Dialog前的准备工作 在安装Dialog之前…

Git 命令行提交代码详细操作

Git 命令行提交代码操作(安装git后&#xff0c;鼠标右键打开Git Bash) 1、查看本地git绑定的用户名和邮箱&#xff1a; git config user.name git config user.email 2、① 修改本地git绑定的用户名和邮箱(全局)&#xff1a; git config --global user.name “Your_userName” …

案例28:基于Springboot毕业设计系统开题报告设计

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…