刚开始接触bundle内容的时候一直有如下一个问题:

bundle不就是js文件的集合体么,为什么不是直接将压缩好的js内容复制过来,而是设计成如此格式呢

让我很诧异的是在网上竟然没有找到相关的资料,起初以为很多人没有意识到这个问题,搞明白以后才发现原来是这个是前端比较基础的内容,应该是很多人不屑于谈这个,泪目呀

要搞明白这个问题,首先我们要知道前端常用的export/module/require等是属于CommonJS规范,而CommonJS规范起源于Node,本身是不支持浏览器的,之所以我们用着没问题,是因为Webpack在bundle文件中帮我们实现了Commonjs规范,可能有朋友会问,我在调试中并没有加载bundle呀,那为啥调试没问题呢,这是因为调试过程中使用的是没有写入文件的bundle,其实跟在生产环境使用的内容是一致的

如上所说,bundle被设计成如此格式,主要就是为了实现CommonJS规范,建议大家在分析bundle的时候(webpack 打包后文件分析),优先要搞明白里面是如何实现CoomonJS的如下两个功能,这两个问题搞懂了,你基本就明白bundle是个啥情况了

  1. 实现模块化开发,提高代码复用率
  2. 实现封装作用域,避免命名冲突

格式的原因分析完后,脑袋里又有如下一个问题:

bundle为啥要是自执行函数呢

这个问题就比较简单了,在webpack是支持同时打出多个bundle的,浏览器也会同时加载多个bundle,使用自执行函数就是为了区分两个bundle的作用域,避免两个bundle的变量在互相污染

聊一聊bundle为啥会被设计成如此格式相关推荐

  1. Spring 为啥默认把 bean 设计成单例的?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:在滴滴和头条干了 2 年后端开发,太真实-个人原创100W+访问量博客:点击前往,查看更多 熟悉Spring开发 ...

  2. Spring为啥默认把bean设计成单例的

    熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton.prototype.request.session.global session.而且默认情况下是single ...

  3. Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的

    作者:小小木 juejin.im/post/5cab7ebf518825177637b2f9 熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton.prototyp ...

  4. 为什么现在电视机的屏幕都要设计成 16:9 的,而不是 4:3?

    [范范的回答(12票)]: 16:9的流行跟高清标清完全没关系 敲了半天字发现有一点儿跑题,自行补充画幅的发展历史 4:3与16:9你了解多少 上面有几位回答搞错了概念,上变换是upscale,倍线而 ...

  5. 为什么RedisCluster会设计成16384个槽呢?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Redis Cluster 是Redis的集群实现,内置数 ...

  6. String的内存模型,为什么String被设计成不可变的

    String是Java中最常用的类,是不可变的(Immutable), 那么String是如何实现Immutable呢,String为什么要设计成不可变呢? 前言 关于String,收集一波基础,来源 ...

  7. 这样设计是否更好些~仓储接口是否应该设计成基础操作接口和扩展操作接口

    前言 我们进行linq to sql和ef时代后,底层的实现基本使用的是repository模块,即仓储模式,事实上就是把ORM实体的最基本操作进行封闭,对外层不公开操作实现的细节. 面向接口的编程 ...

  8. 为什么ui框架设计成单线程_评估UI设计的备忘单

    为什么ui框架设计成单线程 Whether you're evaluating your design proposals or giving feedback to a colleague duri ...

  9. 支付渠道参数如何设计成路由化配置

    转载自  支付渠道参数如何设计成路由化配置 今天我们来探讨在搭建支付系统时一个比较关键的问题:渠道参数路由化配置如何设计? 在开发支付系统的时候,我们经常会涉及到对接多个支付渠道,除常见的支付宝.微信 ...

最新文章

  1. 社交网络图挖掘2--社区的直接发现和图划分
  2. 高糊视频秒变4K!Facebook发布低分辨率视频实时渲染算法,网友:是好东西,但是玩不起...
  3. pycharm 导入或复制项目后run按钮灰色问题(显示pycharm add configuration)
  4. 【Ubuntu-apt-换源】ubuntu系统换源后使用apt-get update时一直0%[执行中]
  5. vue部分样式无法修改
  6. 3D视界迎来全息视角,VR呈现效果海报,引领未来
  7. raft算法_学习分布式一致性协议:自己实现一个Raft算法
  8. mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
  9. 【解决方案】kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
  10. Mcafee(麦咖啡)8.5i 使用设置图解
  11. 酷柚易汛进销存开源版对外接口
  12. Selenium下载与安装
  13. 桂林电子科技大学第三届ACM程序设计竞赛 C
  14. 通用后台管理系统(1)-数据库设计
  15. C/C++编程:trivial和non-trivial
  16. 耗时10个小时用纯HTML和CSS写成的小兔鲜儿
  17. python金融分析培训课程_Python金融分析相关书籍推荐
  18. iOS二维码限制区域识别、扫描动画
  19. java 登录界面加验证码_java 做登陆窗口,带有用户名和密码输入框和验证码。求修改...
  20. linux arm小主机,超级迷你!采用ARM处理器的电脑主板

热门文章

  1. linux 小包 性能,网络数据小包吞吐量测试与分析
  2. C++实现语音识别词典内存存储模型
  3. java怎样实现换肤功能_umi项目换肤功能的实现
  4. [Python]循环语句中的 else 子句
  5. 集成经验模式分解eemdmatlab代码实现
  6. 和功率的计算公式_电缆、功率、耗电量计算公式大全
  7. 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析
  8. java jradiobutton使用_Java Swing组件单选框JRadioButton用法示例
  9. python 11高级特性
  10. android 自定义推送布局_Android之极光推送发送自定义消息