你对webpack的了解怎么样,不来看看?

起源

面试官:"你对 webpack 的了解怎么样,简单地说说。"

没错,这是我最近面试中遇到过的频率较高的一道面试题。从七月到九月疯狂投递简历,但是收到的面试却不是很多,所以我会珍惜每次面试机会,记录好每次的面试题目,以便回顾哪些地方答得不好,哪些地方需要改进,后续我会将我在面试中出现频率高的面试题单独拎出来和大家讲一讲。

对于这个关于 webpack 的题目,请原谅我是一名刚毕业的学生,对 webpack 的了解并不多,可能只知道它可以打包。虽然有过一小段实习机会,但是接触到 webpack 的机会少之又少。

于是乎,我便利用投简历和面试的空隙时间,来学习了解一下 webpack,每天给自己的今日计划中,webpack 必不可少。

webpack的作用和打包流程

这里我们来讲一下它的作用和打包的流程。

作用

我首先看了官方的解释,但是我觉得官方的解释太官方了,我觉得可以将它通俗化一点。webpack 是一个打包工具,它可以将项目进行模块化打包,在进行打包过程的时候会触发 LoaderPlugin(后面会介绍),使得打包后的项目质量更高、速度更快等。

如果要细分作用的话,webpack 还能解决在开发阶段的跨域问题、压缩代码文件等等。

打包流程

关于打包流程我也用相对通俗易懂的话说一遍吧。

webpack 中最核心的就是入口和出口,需要配置好 Loader 加载器和 Plugin 插件。我们可以把 webpack 看做是一个模块打包机,它做的事情是分析项目结构,找到 js 模块以及其他的一些浏览器不能直接运行的语言,比如 TSSCSS 等,通过 Loader 加载器可以将其转换为合适的格式供浏览器使用。最后就转换成相应文件输出到文件系统中即可。

lua 复制代码
  output: {
    // bundle生成位置
    path: path.resolve(__dirname, "dist"),
    // bundle文件名
    filename: "main.js",
    clean: true,
  },

由于 webpack 只能识别 jsjson 文件,因此需要 Laoder 加载器来转换其他类型的模块。

webpack的Loader和Plugin

这里我们来讲一下它里面的 Loader 加载器和 Plugin 插件。

Loader

Loader 被称作加载器,主要主要是翻译浏览器不能直接运行的语言,比如 TSSCSS。当碰到识别不了的模块时,就会通过 Loader 来进行解析。

下面举个简单的小例子。

perl 复制代码
rules: [
      {
        test: /.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
      },
      {
        test: /\.(js|jsx)$/,
        exclude: /(node_modules)/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env", "@babel/preset-react"],
            plugins: [
              ["@babel/plugin-transform-runtime"],
            ],
          },
        },
      },
    ],

这里用到了 css-loaderless-loaderbabel-loader

css-loader 可以将 CSS 文件通过 require 的方式引入,并返回 CSS 代码;less-loader 顾名思义,就是用来处理 Less,与之相同的还有 sass-loader 等;babel-loader 就是用 babel 来转换文件的。

Plugin

Plugin 被称作插件,负责 webpack 扩展功能,来解决 Loader 无法实现的其他事情,像打包优化、资源管理等都是通过 Plugin 来实现的。

下面举个简单的小例子。

arduino 复制代码
  plugins: [
    new HtmlWebpackPlugin({
      template: "./public/index.html",
      filename: "index.html",
      inject: "body",
    }),
    new MiniCssExtractPlugin({
      filename: "./styles/[contenthash].css",
    }),
    new CssMinimizerWebpackPlugin(),
  ],

这里应用到了 HtmlWebpackPluginMiniCssExtractPluginCssMinimizerWebpackPlugin

HtmlWebpackPlugin 用来创建 HTML 文件;MiniCssExtractPlugin 可以将 CSS 代码从 JavaScript 中分离出来,生成单独的 CSS 文件;CssMinimizerWebpackPlugin 这个是关于 CSS 优化的插件,就不过多介绍了。

总结

以上就是关于我对 webpack 的初理解了,对于 webpack 的学习并没有结束,这只是一个开始。

就我目前而言,我使用过 webpack 创建项目,也使用过它里面的插件进行代码优化,不过对于 webpack 的用法还仅仅是浮于表面。

如果有我理解不好的地方或者大伙有更好的理解方式欢迎各位在评论区里指出,另外各位也可以在评论区里讨论一些关于 webpack 的疑难问题~

相关推荐
晚风醉蝶5 天前
保姆级教程:用 AST 自动提取 webpack / rspack 打包后的模块
webpack·web逆向
guwentian11 天前
Rolldown vs esbuild vs Webpack:Rust 打包器大战我们该怎么选
前端·webpack·rust·esbuild
飞翔的熊blabla13 天前
# Webpack 5 + Jenkins 持久化缓存实战:前端构建从 288 秒降到 30 秒>
前端·webpack·jenkins
梨想橙汁14 天前
Vite 优化、踩坑汇总 + Webpack 迁移 Vite 实战
前端·webpack·vite
天道kabuto15 天前
Webpack 迁 Vite 踩坑记:一个让人抓狂的 Sourcemap 报错怎么破?
webpack·vite
梨想橙汁16 天前
Webpack 快速上手:前端工程化、打包原理、从零搭建基础项目
前端·webpack·前端工程化
晴天1616 天前
Webpack3/4/5 核心差异、性能升级与迁移实战指南-Day38
webpack·node.js
晴天1617 天前
Vite vs Webpack 全方位对比
前端·webpack·node.js
PBitW19 天前
为什么vite中TS报错,可以继续运行?Webpack不行?
前端·webpack·typescript·vite
你别说话了20 天前
Webpack 如何迁移重构到 Vite
前端·webpack·重构