使用webpack的动机

  • 页面中越来越多的js
  • 现在浏览器提供更多接口
  • 更少的页面重载刷新,页面中有更多的代码

这些导致浏览器端存在大量的代码,需要重新组织,于是出现了模块系统。

模块系统目前有很多标准:

  • <script>标签风格(没有模块系统)
  • Commonjs
  • AMD规范以及对应实现
  • ES6模块
  • 其它
<script>标签风格

如果没有模块系统,我们经常会这样处理模块化的代码

<script src="module1.js"></script> 
<script src="module2.js"></script> 
<script src="libraryA.js"></script> 
<script src="module3.js"></script>

各个模块把接口暴露给全局对象,比如window对象。各个模块之间可以通过全局对象进行访问互相依赖的接口。

普遍的问题:

  • 全局对象的冲突
  • 加载的顺序是重要的
  • 开发者需要解决模块的依赖问题
  • 在大项目中模块引入的数目将会非常长并且难以维护
commomJs:同步的require

这种风格使用同步的require方法来加载依赖和返回暴露的接口。一个模块可以通过给exports对象添加属性,或者设置module.exports的值来描述暴露对象。

require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;

CommonJs规范在服务端nodejs中使用。
优点:服务端代码可以被重用;npm中有大量模块;用起来简单方便
缺点:阻塞调用无法在网络环境应用,网络请求是异步的;不能并行requrie多个模块

CommonJs规范的实现

  • node.js -server端
  • browserify
  • modules-webmake - 编译成一个 bundle
  • wreq -client端
AMD:异步的require
require(["module", "../file"], function(module, file) { /* ... */ }); define("mymodule", ["dep1", "dep2"], function(d1, d2) { 
    return someExportedValue; 
});

优点:符合了在网络中异步请求的风格;可以并行加载多个模块
缺点:编码成本增加,可读性不好写起来麻烦;更像是一种临时修补方案

AMD 规范的实现有:
require.js - client 端
curl - client 端

ES6模块

ECMAScript 2015 (6th Edition) 给 JavaScript添加了一些语法结构,用来实现另外一种模块系统

import "jquery"; 
export function doStuff() {} 
module "localModule" {}

优点:静态分析方便;作为ES的标准前途是光明
缺点:浏览器支持还需要很长时间;这种风格的模块不多

传输

实现了模块化,将模块从server端传输到浏览器端又是另一个问题,传输模块会出现两个极端:

  • 每个模块都是一个请求
  • 一个请求包含了所有模块

这两种情况目前使用的都很普遍,但都不是最佳方案,第一种虽然只传输需要的模块,但是要发多个请求,请求的延迟会导致应用启动的很慢;第二种虽然请求少、延迟低,但是传输不需要的模块又形成了浪费

webpack就提出了一种更灵活的方式:

当编译所有模块时,将模块集分成多个较小的组(块)
这会使得多个请求更小、更快。初始化阶段不需要的模块组可以按需加载。这样就可以加速初始加载,当你实际需要代码时也能加载更多的代码块。
「分割点」取决于开发者
一个大的代码库也是可能的

并且webpack除了能处理js模块,其他资源也可以处理,这样我们使用起来就更方便

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容