第 101 期 - Webpack5 打包原理及简易实现
logoFRONTALK AI/2月3日 16:37/阅读原文

摘要

本文介绍了 Webpack5 的核心打包原理,包括初始化参数、编译准备、模块编译、完成编译和输出文件等阶段,还通过创建目录、编写插件等操作实现了一个简易版的 Webpack

1. 前置知识

Webpack 在前端构建工具中非常重要,但理解其内部实现机制对开发者来说可能存在困难。这部分介绍了理解 Webpack 打包原理需要的前置知识。

2. 流程梳理

整体从 5 个方面分析 Webpack 打包流程,这部分先对整体流程进行梳理,后面会逐步详细介绍每个阶段。

3. 创建目录

为实现Packing tool创建良好的目录结构,如下:

4. 初始化参数阶段

介绍了日常给webpack传递打包参数的两种方式,并开始动手实现webpack

const path = require('path');
module.exports = {
    mode: 'development',
    entry: {
        main: path.resolve(__dirname, './src/entry1.js'),
        second: path.resolve(__dirname, './src/entry2.js')
    },
    devtool: false,
    context: process.cwd(),
    output: {
        path: path.resolve(__dirname, './build'),
        filename: '[name].js'
    },
    plugins: [new PluginA(), new PluginB()],
    resolve: {
        extensions: ['.js', '.ts']
    },
    module: {
        rules: [
            {
                test: /.js/,
                use: [
                    path.resolve(__dirname, '../loaders/loader-1.js'),
                    path.resolve(__dirname, '../loaders/loader-2.js')
                ]
            }
        ]
    }
};

5. 编译阶段

在得到最终配置参数后,webpack()函数需要做几件事,这部分逐步完善webpack的编译功能。

6. 寻找 entry 入口

任何一次打包都需要入口文件,这部分介绍如何根据入口配置文件路径寻找到对应入口文件。

7. 模块编译阶段

在模块编译阶段需要做一系列的事情,这部分详细介绍模块编译的过程。

8. 编译完成阶段

在将所有模块递归编译完成后,需要根据依赖关系组合最终输出的chunk模块。

9. 输出文件阶段

这部分介绍如何根据前面的编译结果输出文件。

10. 结尾

至此实现了自己的webpack,希望大家通过理解其工作流彻底理解compiler对象,在后续webpack相关底层开发中能熟练运用。同时给出了代码地址和参考文章。

 

扩展阅读

Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有