當前位置:編程學習大全網 - 源碼下載 - Web前端基礎webpack打包原理是什麽?

Web前端基礎webpack打包原理是什麽?

Web前端基礎webpack打包原理是什麽?1、概念

本質上,webpack 基於node平臺,利用 node 的各種api來實現 javascript 應用程序的壹個靜態模塊的打包工具。

在打包過程中,構建依賴關系,並且實現模塊引用預處理,以及緩存等。

2、分析

1、人口文件

// mian.js

const a = require('./m1')

const b= require('./m2')

import { test } from './m1'

console.log(test)

//m2.js

export default {

b:2

}

//m1.js

export const test = {test:1}

export default {

a:1

}

2、生產的文件

(function (modules) {

var installedModules = {}; //緩存

/*

* 加載模塊函數

* 傳入模塊id

* */

function __webpack_require__(moduleId) {

// 檢查緩存中是否有模塊

if (installedModules[moduleId]) {

return installedModules[moduleId].exports;

}

// 創建壹個新模塊,並緩存起來

var module = installedModules[moduleId] = {

i: moduleId,

l: false,

exports: {}

};

// 調模塊的函數,modules

modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

module.l = true;

// 返回對應模塊

return module.exports;

}

__webpack_require__.m = modules;

__webpack_require__.c = installedModules;

__webpack_require__.d = function (exports, name, getter) {

if (!__webpack_require__.o(exports, name)) {

Object.defineProperty(exports, name, {

configurable: false,

enumerable: true,

get: getter

});

}

};

__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;

};

__webpack_require__.o = function (object, property) {

return Object.prototype.hasOwnProperty.call(object, property);

};

__webpack_require__.p = "";

// 加載入口文件

return __webpack_require__(__webpack_require__.s = 0);

})

([

(function (module, exports, __webpack_require__) {

const a = __webpack_require__(1)

const b = __webpack_require__(2)

}),

(function (module, __webpack_exports__, __webpack_require__) {

"use strict";

Object.defineProperty(__webpack_exports__, "__esModule", {value: true});

__webpack_exports__["default"] = ({

a: 1

});

}),

(function (module, __webpack_exports__, __webpack_require__) {

"use strict";

Object.defineProperty(__webpack_exports__, "__esModule", {value: true});

__webpack_exports__["default"] = ({

b: 2

});

})

]);

觀察以上代碼得到結果:

1、打包後的代碼是壹個立即執行函數,且傳入的參數為壹個數組

2、參數數組就是我們引用的模塊

3、每壹個模塊對應著數組的位置就是那麽的id

4、在立即函數中加載入口文件,並執行

__webpack_require__ : 加載並執行某壹個模塊並將模塊緩存在 installedModules 中。

modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

這裏是執行引用的某壹個模塊。

並將module,exports,require 加入模塊中。

這也是為什麽我們在模塊中有全局變量 module/exports/require

通過對打包後的文件分析,基本可以完全理解打包過程。

  • 上一篇:銷售易CRM核心價值
  • 下一篇:圖解通達信股票公式 怎樣調出ENE指標.ENE軌道線指標源代碼公式
  • copyright 2024編程學習大全網