hgq's docs
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)

guoguoqiqi

漫不经心的向往
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)
  • webpack是什么、为什么选择它
  • webpack中module、chunk和bundle的概念
  • 说一下在webpack中的loader和plugin的不同
  • webpack 三种hash的区别
  • webpack基本核心概念
  • webpack工作机制
    • 常用的Loader
    • 常用的Plugin
    • webpack配置与优化实践
    • webpack热更新原理
    • 如何配置webpack热更新
    • 如何提升webpack构建速度
    • babel中polyfill的作用
    • npm和yarn的对比
    • 如何减小打包体积提高页面加载速度
    • 介绍SourceMap
    • 搭建一个前端工程
    • 自定义loader
    • 自定义plugin
    • 相关面试题集合
    • 相关文档网站
    • 对比一下webpack、vite、rollup等构建工具.md
    • loader、plugin的区别,以及编写的思路
    • css-loader和style-loader的区别
    • url-loader和file-loader的区别
    • webpack代码分割和公共代码提取
    • Webpack
    guoguoqiqi
    2022-02-13

    webpack工作机制

    # webpack的工作机制

    # 1. webpack的理解

    webpack是一个前端的构建工具,用于将种类数目繁多的前端工程中的资源打包整合到一起。

    举例来说,目前的前端工程一般都是使用了单页面应用框架的,如Vue或React等,这种项目中有很多种类的资源文件,比如js文件、css文件、图片文件、字体文件,甚至各种需要转译的比如less文件、sass文件、ts文件、jsx文件等等。

    并且由于现在基本都会使用较新的语法特性来开发,比如使用ES6及更高版本等等,所以兼容性较差,最终必须要经过babel转译成浏览器都支持的ES5语法才能上线,包括上面说到的less文件、sass文件、ts文件等也都需要对应的工具来转译成css、js文件,而webpack就能完成以上的所有工作。

    webpack可以通过不同的loader处理不同的文件类型,通过plugin实现更多扩展功能。总之经过webpack的打包,一个庞大复杂的前端工程最终可以被整合成数量很少,体积较小的前端资源包。

    # 2. webpack工作流程

    • Webpack 启动后,会根据我们的配置,找到项目中的某个指定文件(一般这个文件都会是一个 JS 文件)作为入口。然后顺着入口文件中的代码,根据代码中出现的 import(ES Modules)或者是 require(CommonJS)之类的语句,解析推断出来这个文件所依赖的资源模块,然后再分别去解析每个资源模块的依赖,经过深度遍历查找,最后形成整个项目中所有用到的文件之间的依赖关系树

    • Webpack 会遍历(递归)这个依赖树,找到每个节点对应的资源文件,然后根据配置选项中的 Loader 配置,交给对应的 Loader 去加载这个模块,最后将加载的结果放入 bundle.js(打包结果)中,从而实现整个项目的打包

    • 对于依赖模块中无法通过 JavaScript 代码表示的资源模块,例如图片或字体文件,一般的 Loader 会将它们单独作为资源文件拷贝到输出目录中,然后将这个资源文件所对应的访问路径作为这个模块的导出成员暴露给外部

    • 至于自定义插件机制,它并不会影响 Webpack 的核心工作过程,只是 Webpack 为了提供一个强大的扩展能力,它为整个工作过程的每个环节都预制了一个钩子,也就是说我们可以通过插件往 Webpack 工作过程的任意环节植入一些自定义的任务,从而扩展 Webpack 打包功能以外的能力

    # 参考文章链接

    webpack运行机制与核心工作原理 (opens new window)

    ← webpack基本核心概念 常用的Loader→

    最近更新
    01
    vuex数据持久化怎么做
    05-22
    02
    vue的动态路由怎么配置使用
    05-22
    03
    vue权限控制一般怎么做
    05-22
    更多文章>
    Theme by Vdoing | Copyright © 2022-2022 Guoquoqiqi | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式