各种模块化的区别和webpack的小白入门

webpack 入门

说一点历史,为啥这次说历史,因为知道这个历史是有用的,不像那些没用的历史,知道过去能够更好的预测未来。

1.最开始我们写代码

问题:变量冲突,只能顺序加载,无法解决相互依赖,时间长了混乱不堪。

2.IIFES

​ 匿名函数多了依然管理起来麻烦,混乱。

3.面向对象

​ 这个方式不错,就是有些复杂另外依然存在冲突隐患,比如命名空间。

4.commonjs

​ nodejs的模块系统实现方式:

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

优点是简单重用,缺点是尼玛呀,前端不用考虑异步么?总不能一个模块卡那里,别人都傻等着吧。

5.AMD

​ require.js实现方式,

define("module", ["dep1", "dep2"], function(d1, d2) {
  return someExportedValue;
});
require(["module", "../file"], function(module, file) { /* ... */ });

优点异步,缺点尼玛呀这么一大坨代码我就想写个alert费死劲了。各种回调,难受死了。

6.CMD

对,你没有看错,就是CMD,跟common不是一码事。

​ seajs实现方式,

优点是异步,你能在node里面玩,缺点是越来越特么的复杂了。

7.ES6模块

ES6 模块

​ 这个是原生的不需要什么库,当然你可以去看看Babel。

在ECMAScript2015(es6)中,增加了JavaScript语言层面上的模块体系定义,其设计思想是:尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出变量。

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

缺点:

​ 我只是一个前端,搞这么复杂我只是想写个选项卡,你让配置那么多东西,调各种模块合适么?

​ 1.复杂,尤其是对小白

​ 2.逻辑过重,向后台靠拢,还不兼容。

优点:
容易进行静态分析
面向未来的 EcmaScript 标准

可以把所有东西模块化

但是,可是,可但是,但可是,必须有问题,否则就我没法往下讲了,也是webpack出现的一个理由
把程序所有的文件进行模块化之后,我们还要处理一个问题那就是传输问题。模块的化分让我们可以让程序变得可以组件化进行开发,组件虽然被客户端执行,但是依然要由服务器传送给客户端。==

关于组件的传送有两个极端:

每个组件,一个HTTP请求

优点:仅仅传送依赖项

缺点:请求多,负载高,更慢的启动延迟

所有的组件,一个HTTP请求

优点: 更快,更低的延迟

传送了没有必要传送的东西

让我在这两种情况之间做一个妥协:分块传输,按需进行懒加载,在实际用某些模块的时候进行增量的更新,才是比较合理的加载方案。

要实现这个功能,需要在编译打包时进行静态的分析、模块进行分批次的打包。那么这个分批次谁来做呢?

答案就是:==WebPack==bpack是啥?

​ 一句话,它其实严格的说更像gulp,虽然官方声称是模块加载和打包工具,个人使用感受是,用模块化的方式写任务,

当然了撸代码确实更爽,特别强调一句,这货把各种资源都给模块化了,比如图片等。

要学会wb(webpack),必须懂四个东西:

入口 一条蛇钻进了河里 (输入什么东西)

出口 出来一只王八(输出什么东西)

加载器 大象一把踩上去(遇到什么样的文件,用什么解析,比如.less文件的加载器是less)

插件 小样你把马甲穿上照样认识你!(加载器是文件级别的,插件可以文件级别也可以函数级别更精准的控制)

总结一句话,webpack就是帮你把所有资源全部模块化的一个工具,具体的四个概念和详细的代码,我们下篇继续。

你可能感兴趣的:(各种模块化的区别和webpack的小白入门)