webpack 源码阅读(一):webpack 启动

7 篇文章 0 订阅
3 篇文章 1 订阅

从本文开始起将深入探索webpack的工作细节。如果你也是第一次尝试了解webpack源代码细节,建议先看另外一篇文章tapable的用法,这个小小的库将贯穿整个webpack的始终。调度着各种模块构建有条不紊的进行。

本篇我们探索的主要目标

  1. 如何调试webpack
  2. webpack 和webpack-cli 如何配合工作的
  3. webpack的最基本的流程

PS:本文webpack 源码阅读基于webpack 4.x

准备工作:
新建一个文件夹,初始化npm,安装webpack 和webpack-cli

npm i -D webpack
npm i -D webpack-cli

新建一个webpack.config.js 文件
先忽略大部分配置细节,只配置一个入口文件

module.exports = {
    entry: './index.js'
};

创建一个index.js 文件 和一个test.js 文件

// index.js
import { add } from './test'

const a = add(1,2)
console.log(a)
// test.js
export function add (a, b) {
    return a + b
}
  1. 如何调试webpack
    webpack代码是由node编写的,所以调试的方式和调试node是一样的,chrome支持了我们像调试前端代码一样的inspect模式:
  • 启动node 调试模式
node --inspect-brk node_modules/.bin/webpack
  • 打开浏览器调试模式
    在这里插入图片描述
  • 点击inspect,默认会在首行断点,接下来我们就可以像调试前端js一样一行行的看node执行过程了
    在这里插入图片描述
    在这里插入图片描述

在这个文件里,webpack主要做了两件事

  1. 检测是否安装了webpack-cli
  2. 如果没有装,采用交互的方式引导你安装webpack-cli
  3. 如果你装了,通过require 引入webpack-cli/bin/cli.js

好像到这里就结束了,webpack-cli 引入了,啥也没干?
我们到webapck-cli/bin/cli.js 开头打个断点

在这里插入图片描述
webpack-cli 采用了一个自执行函数,也就是当前require webpack-cli 的时候,这个自执行函数就开始工作了。

webpack-cli 的主要工作:

  1. 解析处理webpack 传入的各种命令行参数
  2. 创建compiler对象
  3. 执行compiler
    在这里插入图片描述
    当然也会挂载一些钩子函数。
    在这里插入图片描述
    执行compiler
    在这里插入图片描述
    compiler 内部将会按照我们的配置以及webpack的默认配置开始对我们的项目进行各种打包操作。
    好了,这是我们启动一个最简单的webpack命令,发生的最基础的事情。后续会继续深入探讨更多的webpack compiler 的处理逻辑。

本文最后还有一个问题。我们只是执行了webpack,webpack是怎么知道去读取webpack.config.js的呢?
在webpack-cli/bin/cli.js文件下,
options 是读取的 ./utils/convert-argv 这个模块的,所以肯定在这里有一个默认配置
在这里插入图片描述
./utils/convert-argv
在这里插入图片描述
所以不光是webpack.config.js能被识别, webpackfile.js 也是可以起到相同作用的。

有了这个入口的基础,我们可以通过这一调试流程,探索出各种参数的作用和使用技巧。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森哥的歌

一杯咖啡半包烟,助我熬过那长夜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值