Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to understand how bundle.js executes using Webpack

while looking at the bundle.js, producted from webpack, i can see "webpackBootstrap" function wrapped inside parenthesis. Since it is not IIFE, "webpackBootstrap" function inside it seems to be running magically.

Seems other function, again wrapped inside parenthesis has array of modules which some how is feeding into first function but am vague on how it is executing. Thus seeking help to understand execution flow of "bundle.js".

    /******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};
/******/
/******/    // The require function
/******/    function __webpack_require__(moduleId) {
/******/
/******/        // Check if module is in cache
/******/        if(installedModules[moduleId]) {
/******/            return installedModules[moduleId].exports;
/******/        }
/******/        // Create a new module (and put it into the cache)
/******/        var module = installedModules[moduleId] = {
/******/            i: moduleId,
/******/            l: false,
/******/            exports: {}
/******/        };
/******/
/******/        // Execute the module function
/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/        // Flag the module as loaded
/******/        module.l = true;
/******/
/******/        // Return the exports of the module
/******/        return module.exports;
/******/    }
/******/
/******/
/******/    // expose the modules object (__webpack_modules__)
/******/    __webpack_require__.m = modules;
/******/
/******/    // expose the module cache
/******/    __webpack_require__.c = installedModules;
/******/
/******/    // identity function for calling harmony imports with the correct context
/******/    __webpack_require__.i = function(value) { return value; };
/******/
/******/    // define getter function for harmony exports
/******/    __webpack_require__.d = function(exports, name, getter) {
/******/        if(!__webpack_require__.o(exports, name)) {
/******/            Object.defineProperty(exports, name, {
/******/                configurable: false,
/******/                enumerable: true,
/******/                get: getter
/******/            });
/******/        }
/******/    };
/******/
/******/    // getDefaultExport function for compatibility with non-harmony modules
/******/    __webpack_require__.n = function(module) {
/******/        var getter = module && module.__esModule ?
/******/            function getDefault() { return module['default']; } :
/******/            function getModuleExports() { return module; };
/******/        __webpack_require__.d(getter, 'a', getter);
/******/        return getter;
/******/    };
/******/
/******/    // Object.prototype.hasOwnProperty.call
/******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/    // __webpack_public_path__
/******/    __webpack_require__.p = "";
/******/
/******/    // Load entry module and return exports
/******/    return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {



function hello(){
    console.log('hello world');
}


hello();


/***/ })
/******/ ]);
like image 371
rosnk Avatar asked May 24 '26 02:05

rosnk


1 Answers

Webpack does indeed wrap everything in an IIFE, and that function runs in the following steps:

  1. webpack wraps everything in an IIFE, which gets invoked with all the modules (as an array)
  2. webpack creates a __webpack_require__ function, which internally requires modules when needed
  3. webpack kicks off by running the first module (which is the entry module) using the __webpack_require__ function
  4. all previous require statements get replaced with an invocation of __webpack_require__ with the correct module index from the passed in array

The above 4 points are from a blog post I wrote, and you're free to check it out here for more information.

like image 120
Nick Salloum Avatar answered May 26 '26 15:05

Nick Salloum