webpack原理解析(几张图清楚了解其原理)

webpack是利用什么来打包的?

  • webpack依赖于node的环境与文件操作系统
  • webpack的打包过程,其实就是利用node去读取文件,然后进行一些字符串处理后,再利用node去写入文件

webpack打包流程

webpack打包流程图

Loader是如何生效的?

  • Loader其实是一个方法:接受一个字符串,方法内部处理完后再返回字符串,结构如下图代码所示:
// Loader 组织结构
// 下面会将文件内容 c1 编译打包为 console.log(1)
module.exports=function(resource){
  // 如果想传出更多的参数信息,如错误,sourcemap等,则可使用下面这种方式
  // this.callback(err,resource.replace('c',"console.log"),sourcemap)
  
  // return 只能传出一个处理后的结果
  return resource.replace('c',"console.log");  
}

打包结果分析

// 打包代码组成
(function(modules){ // modules 就是传进来的对象,即所有要被打包的代码
  function __webpack_require__(moduleId){};

  return __webpack.require(__webpack_require__.s="./app.js")
})({
  "./app.js":(function(){}),
  "module1.js":(function(){}),
  "module2.js":(function(){}),
})

// 上面代码其实就是一个匿名自执行函数,参数就是相关业务代码,就是相关被打包的代码一起作为一个对象写进去,
// 这个对象的键名是相关依赖的名字,值是一个函数,就是要执行的代码。
// 然后里面有一个 __webpack_require__ 方法,会依次执行我们的代码

如何排队模块

排队模块

  • 上图显示,会首先排队入口文件app.js,如果app.js里面引入了module1.js文件和module2.js文件,则会依次排队module1.js,module2.js;如果module1.js里引入了module2.js文件,此时module2.js已经在队伍当中,所以不会再去重复排队。

dev-server原理

  • dev-server是利用express和一个中间件webpack-dev-middleware来开启服务,然后开启的server会执行打包出来的代码。

热更新原理

开启服务==》建立一个websocket链接==》发生代码改变,服务通过websocket通知到客户端==》客户端替换新代码。
热更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值