浅谈webpack打包原理

模块化机制

webpack并不强制你使用某种模块化方案,而是通过兼容所有模块化方案让你无痛接入项目。有了webpack,你可以随意选择你喜欢的模块化方案,至于怎么处理模块之间的依赖关系及如何按需打包,webpack会帮你处理好的。

关于模块化的一些内容,可以看看我之前的文章:js的模块化进程
核心思想:

一切皆模块:
正如js文件可以是一个“模块(module)”一样,其他的(如css、image或html)文件也可视作模 块。因此,你可以require(‘myJSfile.js’)亦可以require(‘myCSSfile.css’)。这意味着我们可以将事物(业务)分割成更小的易于管理的片段,从而达到重复利用等的目的。
按需加载:
传统的模块打包工具(module bundlers)最终将所有的模块编译生成一个庞大的bundle.js文件。但是在真实的app里边,“bundle.js”文件可能有10M到15M之大可能会导致应用一直处于加载中状态。因此Webpack使用许多特性来分割代码然后生成多个“bundle”文件,而且异步加载部分代码以实现按需加载。

文件管理

每个文件都是一个资源,可以用require/import导入js
每个入口文件会把自己所依赖(即require)的资源全部打包在一起,一个资源多次引用的话,只会打包一份
对于多个入口的情况,其实就是分别独立的执行单个入口情况,每个入口文件不相干(可用CommonsChunkPlugin优化)

打包原理

把所有依赖打包成一个bundle.js文件,通过代码分割成单元片段并按需加载。

在这里插入图片描述

如图,entry.js是入口文件,调用了util1.js和util2.js,而util1.js又调用了util2.js。

打包后的bundle.js例子

/*****/ ([ / 0 / //模块id /**/ function(module, exports,
webpack_require) {

webpack_require(1); //require资源文件id
webpack_require(2);

/**/ }, / 1 / /**/ function(module, exports, webpack_require)
{ //util1.js文件
webpack_require(2);
var util1=1;
exports.util1=util1;

/**/ }, / 2 / /**/ function(module, exports) { //util2.js文件
var util2=1;
exports.util2=util2;

/***/ } … … /******/ ]);

bundle.js是以模块 id 为记号,通过函数把各个文件依赖封装达到分割效果,如上代码 id 为 0 表示 entry 模块需要的依赖, 1 表示 util1模块需要的依赖
require资源文件 id 表示该文件需要加载的各个模块,如上代码_webpack_require__(1) 表示 util1.js 模块,webpack_require(2) 表示 util2.js 模块
exports.util1=util1 模块化的体现,输出该模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu rsync

rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法&#xf…

android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...

好久没写文章了,其实是想记录一下自己在Android开发的成长历程。谈到音视频这块,对于新手来说刚接触到这一块,那是非常非常的恶心~我自己弄这一块也是从头开始,在 网上也翻阅了无数的资料、浏览了无数的博客,尝试了多种…

CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html

CImage类 Visual C的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。如果想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控…

新华计算机学校环境好吗,新华电脑校园环境好不好?(二)

随着学校规模的不断扩大和办学层次的逐步提高,新华的办学理念已发生了根本性的变化。在新华全国院校中,校园环境的美化和建设对大学生文化素质的教育有着不可替代的推动作用。在校园总体现划上,特别注重建筑布局和美化布局的相互映衬&#xf…

实现深拷贝的几种方法

1.我们怎么去实现深拷贝呢,这里可以递归递归去复制所有层级属性。 这么我们封装一个深拷贝的函数(PS:只是一个基本实现的展示,并非最佳实践) 复制代码 function deepClone(obj){let objClone Array.isArray(obj)?[]:{};if(obj &&…

投资合伙人股份分配_合伙人股权分配,你必须知道的三大要点!

原标题:合伙人股权分配,你必须知道的三大要点!随着社会的发展,越来越多的年轻人选择创业,也有很多人选择合伙创办企业,但是很多也是因为股权和钱如何分的问题最后不欢而散,合伙创办企业好处很多…

前端-给定一个字符串str,如何实现每个单词首字母都大写,其余部分小写。

确保字符串的每个单词首字母都大写&#xff0c;其余部分小写。 function f(str){ var arr str.toLowerCase().split(" “); //转小写&#xff0c;分割成字符串数组 for(var i0; i<arr.length; i){ arr[i] arr[i].charAt(0).toUpperCase()arr[i].slice(1); //重新组合…

计算机无法同步时间,为什么在Win7中无法同步计算机时间?

[文章摘要]在win7中&#xff0c;为什么不能同步计算机时间&#xff1f;有什么解决办法吗&#xff1f;接下来&#xff0c;我将向您介绍为什么无法在win7中同步计算机时间的主要症状&#xff0c;可能的原因和解决方法.在win7中&#xff0c;为什么不能同步计算机时间&#xff1f;有…

中国移动集中化BI探索:数据仓库与Hadoop混搭

随着移动互联网、物联网/传感器等技术的发展&#xff0c;全球数据生产速度正在高速增长&#xff0c;信息已成为企业的战略资产。而运营商作为网络时代的数据交换中心&#xff0c;其网络管道、业务平台、支撑系统中每天都在产生大量有价值的数据&#xff0c;基于这些数据的商业智…

计算机管理器win8.1,没事折腾?Win8.1文件管理器设置几招

有人说玩系统的高端表现就是在保证运行的前提下上没事折腾&#xff0c;今天就支几招Win8.1文件管理器的设置技巧给大家。可能有些人对捣鼓系统感到不解&#xff0c;在他们看来这种举动就像是折腾&#xff0c;明明拿来就能用的东西非要动手改造一下。其实对于中高级用户来说&…

Linux下如何创建loop device

在Linux中&#xff0c;有一种特殊的块设备叫loop device,这种loop device设备是通过影射操作系统上的正常的文件而形成的虚拟块设备 。因为这种设备的存在&#xff0c;就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制.下面是一个示例: 第一步&#xff1a;用dd…

在职研究生和全日制研究生的区别_“在职研究生”与“全日制研究生”有什么区别?...

“硕士研究生”是介于本科与博士之间的一个学位&#xff0c;与本科教育相比&#xff0c;研究生教育更加注重培养学生研究问题和分析问题的能力。在我国&#xff0c; 研究生可以分为两种形式&#xff1a;在职研究生、全日制研究生。其中&#xff0c;报考“在职研究生”是社会工作…

计算机多媒体设计徽章,酷毙了:Hackaday将会议徽章设计成一台可编程的电脑

Hackaday徽章可以直接挂在你的脖子上&#xff0c;但看起来更像一台小型的掌机&#xff0c;这是Hackaday Superconference的徽章。参加会议的每个人都获得这种徽章&#xff0c;它具有320 x 240彩色显示屏&#xff0c;完整的qwerty键盘和无限的可编程潜力&#xff01;内置的固件运…

后来的我们王俊凯王源机器人_王俊凯杨紫到底是什么关系

先说结论——中餐厅里的梳头姐弟之所以动人&#xff0c;是因为纯粹、纯净、真挚。 既和深厚等词不搭边&#xff0c;也不是cp。下面来分析。一先说最关注的&#xff0c;两人到底有没有情愫&#xff0c;是不是cp。如果有情愫的话&#xff0c;王俊凯对待杨紫会比对其他人优待。对比…

进程间通信管道进阶篇:linux下dup/dup2函数的用法

由于利用管道实现进程间通信&#xff0c;是通过创建两个文件描述符&#xff0c;但是描述符的初始化是通过随机的&#xff0c;就是从可用的文件描述符中取出&#xff0c;并将可用的文件描述符与file对象相关联&#xff0c;如果我们需要将管道的两头与其他的流相关时&#xff0c;…

浙江大学计算机博士申请考核,考博经验|2020年浙江大学博士申请考核经验分享...

原标题&#xff1a;考博经验&#xff5c;2020年浙江大学博士申请考核经验分享本文系"研海拾珠"公众号原创&#xff0c;获取更多考博资料考博经验请移步公众号平台。作者 |Domin &#xff0c;浙江大学博士朝着目标坚定不移自我上学起&#xff0c;我爸妈就告诉我好好学…