工程化之webpack打包过程

今天,我们选择了一个在前端范围内,占很大比重的构建工具–Webpack

近一年的npm下载量

github对应的stars

可以看到,无论是从npm 下载量github的star的数量,Webpack都遥遥领先于其他工具(grunt/gulp/rollup/swc)

Webpack 是一个非常强大的构建工具,它可以被认为是当今许多技术中的一个基本组件,前端开发人员使用它来构建他们的应用程序。

好了,话不多说,继续赶路。

你能所学到的知识点

1.Webpack常见概念(entry/output/loader)
2.从entry对象{a:'./a.js'}如何构建一个模块树>

`entry`=>`EntryPlugin`=>`EntryDependency`=>`NormalModuleFactory`=>模块树 

3.ModuleGraph 如何跟踪已建模块直接的关系
4.ModuleGraph是如何被构建的
5.Module/Chunk/ ChunkGroup /EntryPoint具体是啥并它们直接的关系
6.ChunkGraph是如何被构建的


文章概要

0.Webpack基本概念简讲
1.打包流程总览
2.entry对象
3.深入理解 ModuleGraph
4.构建ModuleGraph
5.Module/Chunk/ ChunkGroup /EntryPoint 是个啥
6.提交chunk资源


0. Webpack基本概念简讲

本质上,webpack 是一个现代 JavaScript 应用程序的静态{模块打包器| module bundler}> 当 webpack 处理应用程序时,它会递归地构建一个{依赖关系图| dependency graph},其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

运行方式

在项目中有两种运行 Webpack 的方式:

1.基于命令行的方式webpack --config webpack.config.js 2. 基于代码的方式

var webpack = require('webpack') 
var config = require('./webpack.config')
webpack(config, (err, stats) => {}) 

重要概念

针对Webpack有几个重要的概念需要知晓。

关键字 作用
Entry Webpack 的入口文件指的是应该从哪个模块作为入口,来构建内部依赖图
Output 告诉 Webpack 在哪输出它所创建的 bundle 文件以及输出的 bundle 文件该如何_命名_、_输出到哪个路径下_等规则
Loader 模块代码转化器使得 Webpack 有能力去处理除了 JS、JSON 以外的其他类型的文件
Plugin Plugin 提供执行更广的任务的功能包括:打包优化资源管理,_注入环境变量_等
Mode 根据不同运行环境执行不同优化参数时的必要参数
Browser Compatibility 支持所有 ES5 标准的浏览器(IE8 以上)

1. 打包流程总览

在此篇文章中,我们只针对NormalModules进行讲解。当然,还有其他类型的模块 如 ExternalModuleConcatenatedModule(当使用require.context()时)这些都不在我们讨论范围内。

先来一个总体流程,润润嗓子。(莫慌,关键的点,后面都会做解释)


2. entry对象

一切都从entry对象开始

我们用一个简单例子来说明它的作用,在这个例子中,entry对象只是一个键值对的集合

// webpack.config.js
entry: {
	a: './a.js',
	b: './b.js',
	/* ... */
} 

webpack 中的模块与文件是一一对应的。

因此,在上面的代码中,a.js会产生一个新的模块,而b.js也会产生。

模块是文件的升级版。> 模块,一旦创建和构建,除了源代码,还包含很多有意义的信息,如:

  • 使用的加载器
  • 它的依赖关系
  • 它的出口(如果有的话)
  • 它的哈希值

同时entry对象中的每一项都可以被认为是模块树中的根模块模块树是因为根模块可能需要一些其他的模块,这些模块可能需要其他的模块,等等。所有这些模块树都被储存在 ModuleGraph

我们需要提到的下一件事是,webpack是建立在很多插件之上的。人们有很多方法可以加入_自定义逻辑_。webpack的可扩展性是通过hook实现的。例如,你可以在 ModuleGraph 建立后,当一个新的{资源|asset }被生成时,在模

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack 是一个现代的 JavaScript 应用程序的模块打包器。它可以将各种资源,如 JavaScript、CSS、图片等,打包成一个或多个静态资源文件。下面是 Webpack打包过程: 1. 配置:首先,你需要创建一个 webpack.config.js 文件来配置 Webpack。在配置文件中,你可以指定入口文件、输出目录、加载器、插件等。 2. 入口:Webpack 会根据配置中指定的入口文件来开始打包。入口文件是应用程序的起点,可以是一个或多个文件。 3. 加载器:Webpack 使用加载器来处理非 JavaScript 文件。加载器可以将其他类型的文件转换成 JavaScript 模块,以便在应用程序中使用。常见的加载器有 Babel(用于转换 ES6+ 语法)、CSS-loader(用于处理 CSS 文件)、file-loader(用于处理文件资源)等。 4. 解析:Webpack 会解析模块之间的依赖关系。它会分析入口文件,并递归地查找所有被引入的模块,然后构建一个依赖图。 5. 打包:根据依赖图,Webpack 将所有模块打包成一个或多个静态资源文件。通常情况下,Webpack 会将所有模块打包成一个 JavaScript 文件(通常称为 bundle.js),但也可以根据需要生成多个文件。 6. 插件:Webpack 的插件系统提供了很多功能扩展。插件可以用于优化打包结果、处理额外的任务等。常见的插件有 UglifyJsPlugin(用于压缩 JavaScript 代码)、HtmlWebpackPlugin(用于生成 HTML 文件)等。 7. 输出:最后,Webpack打包结果输出到指定的目录。输出文件可以是一个或多个静态资源文件,具体取决于配置中的设置。 以上就是 Webpack打包过程。通过配置、入口、加载器、解析、打包、插件和输出等步骤,Webpack 能够将多个模块打包成一个或多个静态资源文件,以便在浏览器中加载和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值