Webpack之模块加载

本文详细介绍了Webpack如何进行模块划分和加载,重点解析了核心函数`webpack_require`的工作机制,包括模块缓存、异步加载的实现过程。通过深入理解,有助于前端开发者更好地掌握Webpack的模块管理。
摘要由CSDN通过智能技术生成

Webpack之模块加载

webpack作为前端打包工具受到大多数的前端开发者的青睐,在使用webpack的过程我们通过webpack自带的模块化功能实现了项目代码的模块化,方便了我们管理和维护,那么webpack是怎么实现各个模块之间的划分和加载的呢?

模块划分

在了解模块加载之前,我们需要首先看下webpack是怎么将一个个文件划分为模块的。我们有一个入口文件index.js以及模块a.js、b.js,代码如下

// index.js
import A from './a.js'
function hello () {
   
    console.log(A)
}
hello()
export default hello

// a.js
export default {
   
    a: 'a'
}
// b.js
export const B = function () {
   
    console.log('B')
}

在经过了webpack的各种编译之后,会产生一个bundle.js的文件,我们来看下里面的大体结构。

(function(modules){
   
  ......
  ......
  var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
  var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
  jsonpArray.push = webpackJsonpCallback;
  jsonpArray = jsonpArray.slice();
  for(var i = 0; i < jsonpArray.length; i++)    
    webpackJsonpCallback(jsonpArray[i]);
  var parentJsonpFunction = oldJsonpFunction;
  return __webpack_require__(__webpack_require__.s = "./src/main.js");
})(
 {
   
   "./src/a.js": (function(module, __webpack_exports__, __webpack_require__){
   
       .......
       .......
   }),
   "./src/main.js": (function(module, __webpack_exports__, __webpack_require__){
   
       .......
       .......
   })
 }
)

我们可以看到webpack最终打包出来的文件其实一个立即执行函数,函数的参数是一个modules对象。webpack将一个文件作为一个模块,用文件的相对路径来作为module的key,把文件的内容用一个闭包包裹作为module的值。将modules传入上面的函数之后,执行到return webpack_require(webpack_require.s = “./src/main.js”); 部分,加载我们的入口文件main.js。所以我们可以看出webpack进行模块加载的关键就是__webpack_require__函数了。

模块加载
webpack_require
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值