我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

    • nodejs

    • git

    • CI

    • 小程序

    • docker

    • Typescript

    • webpack

      • webpack到底有什么作用
        • 是什么
        • 怎么用
          • 作用
        • 原理
          • 模块打包运行原理
        • FAQ
      • webpack能给前端做哪些性能优化
      • webpack能给前端做哪些性能优化
      • 说说Webpack中常见的Loader?解决了什么问题?
      • 说说webpack proxy的工作原理?
      • 说说webpack中常见的Plugin?解决了什么问题?
      • 说说webpack热更新的理解
      • 说说webpack的构建流程?
      • 说说前端打包工具还有哪些
      • 说说对webpack的理解, 解决了什么问题
      • 说说编写loader和plugin的思路
    • 安全

  • 基础

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 大前端
  • webpack
fangdown
2021-08-01
目录

webpack到底有什么作用

# 是什么

webpack 是一个前端打包工具

# 怎么用

# 作用

  1. 模块打包: 可以将不同模块的文件打包整合在一起,并且保证他们之间的引用正确,执行顺序
  2. 编辑兼容: 通过webpack的loader机制,不仅仅帮我们做代码polyfill,还可以编译诸如.less,.jsx,.vue这类在浏览器无法识别的格式文件,让我们可以在开发时使用新语法和新特性,提高开发效率。
  3. 能力扩展: 通过webpack的plugin机制, 在模块化打包的基础上可以进一步实现按需加载,代码压缩等一系列功能,提高打包自动化、工程效率、打包输出的质量

# 原理

# 模块打包运行原理

  1. 读取webpack的配置参数;
  2. 启动webpack,创建Compiler对象并开始解析项目;
  3. 从入口文件(entry)开始解析,并且找到其导入的依赖模块,递归遍历分析,形成依赖关系树;
  4. 对不同文件类型的依赖模块文件使用对应的Loader进行编译,最终转为Javascript文件;
  5. 整个过程中webpack会通过发布订阅模式,向外抛出一些hooks,而webpack的插件即可通过监听这些关键的事件节点,执行插件任务进而达到干预输出结果的目的。

最终Webpack打包出来的bundle文件是一个IIFE的执行函数。

# FAQ

3个变量,1个函数

  1. webpack_modules
  2. webpack_module_cache
  3. webpack_exports
  4. webpack_require
// webpack 5 打包的bundle文件内容

(() => { // webpackBootstrap
    var __webpack_modules__ = ({
        'file-A-path': ((modules) => { // ... })
        'index-file-path': ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { // ... })
    })
    
    // The module cache
    var __webpack_module_cache__ = {};
    
    // The require function
    function __webpack_require__(moduleId) {
        // Check if module is in cache
        var cachedModule = __webpack_module_cache__[moduleId];
        if (cachedModule !== undefined) {
                return cachedModule.exports;
        }
        // Create a new module (and put it into the cache)
        var module = __webpack_module_cache__[moduleId] = {
                // no module.id needed
                // no module.loaded needed
                exports: {}
        };

        // Execute the module function
        __webpack_modules__[moduleId](module, module.exports, __webpack_require__);

        // Return the exports of the module
        return module.exports;
    }
    
    // startup
    // Load entry module and return exports
    // This entry module can't be inlined because the eval devtool is used.
    var __webpack_exports__ = __webpack_require__("./src/index.js");
})

#webpack
上次更新: 2021/12/19, 18:05:42
说说对Typescript的理解
webpack能给前端做哪些性能优化

← 说说对Typescript的理解 webpack能给前端做哪些性能优化→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式