前者构建工具的如何——Webpack vs Gulp 谁会被击大于沙滩上。前端构建工具的如何——Webpack vs Gulp 谁会吃撞击好在沙滩及。

读书目录

开卷目录

  • 美妙之前端开发流程
  • Gulp 为何物
  • webpack 又是于哪冒出来的
  • 结论
  • 可以的前端开发流程
  • Gulp 为何物
  • webpack 又是自哪冒出来的
  • 结论

文章有接触长,总共 1800 字,阅读要 18
分钟。哈哈,没耐心的第一手穿我交高潮部分。

章有接触长,总共 1800 字,阅读要 18
分钟。哈哈,没耐心的直接通我顶高潮部分。

优秀之前端开发流程

以游说构建工具之前得预说说我们期望之前端开发流程是什么样的?

  • 写作业逻辑代码(例如 es6,scss,pug 等)
  • 处理成浏览器认识的(js,css,html)
  • 浏览器自动刷新看到效果

前端开发就是在不停的 123..123..123….
循环中开展的,上面的晚少步(也就是 2 及 3)应该是 自动化
的,前端开发者应只待关注第 1 步——写作业逻辑代码。

自动化的工作应到由构建工具来开,时下流行的前端构建工具发出 gulp 和
webpack(有人说 webpack
不到底是构建工具,我觉着这并未什么好争的。横看成岭侧成峰,我认为自打眼前
webpack 所能够开的业务来拘禁,说它们是构建工具丝毫不呢过)。本文不见面指向
gulp 和
webpack
的概念与内容做透剖析,而是欲于总的角度研究他们之优势短缺以及适用场景,从而说穷长期弥漫于前端圈二者之间扑朔迷离的关系。

哟是构建工具
构建工具是平等段落机关根据源代码生成可采用文件之顺序,构建过程包括打包、编译、压缩、测试相当整整需对源代码进行的相干处理。构建工具的目的是促成构建过程的自动化,使用其好为咱们避免机械重复的劳动(这提心吊胆是程序员最无可知经得住的了),从而解放我们的手。

解放了双手干啊
哇槽,爱关系啊关系啊。

良的前端开发流程

于游说构建工具之前得事先说说俺们期望的前端开发流程是怎么的?

  • 形容作业逻辑代码(例如 es6,scss,pug 等)
  • 拍卖成浏览器认识的(js,css,html)
  • 浏览器自动刷新看到成效

前端开发就是于持续的 123..123..123….
循环往复中展开的,上面的继少步(也就是是 2 同 3)应该是 自动化
的,前端开发者应该只需要关注第 1 步——写作业逻辑代码。

自动化的事务应该到由构建工具来做,时下流行的前端构建工具有 gulp 和
webpack(有人说 webpack
不算是是构建工具,我觉得就从没什么好争的。横看成岭侧成峰,我道从脚下
webpack 所能做的事体来拘禁,说她是构建工具丝毫无为过)。本文不会见指向
gulp 和
webpack
的定义以及内容做深刻解析,而是欲从本的角度研究他们之优势短缺和适用场景,从而说清长期弥漫在前端圈二者之间扑朔迷离的涉。

哟是构建工具
构建工具是一模一样段落机关根据源代码生成可采用文件之先后,构建过程包括打包、编译、压缩、测试相当全方位需对源代码进行的相干处理。构建工具的目的是兑现构建过程的自动化,使用其好吃咱们避免机械重复的劳动(这提心吊胆是程序员最无可知经得住的了),从而解放我们的手。

解放了双手干啊
哇槽,爱关系啊关系啊。

Gulp 为何物

先期来听 Ta 的官网是怎么说:

Gulp 致力于 自动化和优化 你的工作流,它是一个自动化你开工作面临
痛苦又耗时任务 的工具包。

想念同一怀念我们普通的开工作负痛而耗时任务来哪些呢?

  • 就此 es6,typescript 编写的本子文件要编译成浏览器认识的 javascript
  • 因此 scss,less 编写的体文件要编译成浏览器认识的 css
  • 自我批评代码是否相符书写规范,跑单元测试和购并测试
  • 付出条件要来 sourcemaps
    的语句调试起来便有利于多矣,修改完毕代码浏览器能自动刷新立即看到成效就是再度好了
  • 产条件布置代码需要减少合并静态文件,添加文书指纹控制缓存
  • blabla…更多之您协调想吧

Gulp 声称如果拉我们实现
自动化,那他是怎样扶我们实现自动化的吗?这即不得不先领一口牛逼哄哄的
NodeJS

Node 背景多少知识

Node 使前端 Jser 有了退出浏览器工作之能力,要按以前的言语我们写的 js
要么嵌到 html 页面里,然后据此浏览器打开 html
页面才会运作js,要么就算是当浏览器开发者工具的 Console
面板里编写运行代码有。总之没了浏览器是宿主,咱们的 js 就 run
不起。Node 这卖突发奇想,把开发者工具的 Console 给勒下来了,从此 js
可以退出浏览器直接在 node 里运行。一定给 js
现在发出了有限独宿主环境,一个凡浏览器,一个是 node
。当然矣,Node
可不是开发者工具里的 Console,那就是从独如。它是根据Chrome V8
引擎实现之一个 JavaScript 运行环境,功能实在看似 Console
面板,但提供了大量实用的 API,感兴趣的同学可过去
Node官网 详细询问,英文吃力的骚年
戳这里。Node 可以算是前端革命式的换代,随 node
一起发布的 node 包管理器 npm(node package manager)
也曾是世界最可怜的开源库生态系统。node/npm
这对组合一样发出,前端生态迎来了大爆发,一时间为化解各种问题之 node
包层出不穷,遍地开花。gulp 就是英雄,一路过五关斩六用闯出来的一个小
node 包。

扯谈完毕,接下去就来看看 gulp
是不是当装逼,他到底能免可知帮忙我们兑现自动化。

作一个 node 包,标准打开方式当然是:

npm i -g gulp

下一场呢,这里因为编译 less 为例,首先安装编译 less 需要采取的 node 包:

npm i --save-dev gulp gulp-less

眼前早已全局安装了 gulp 了,怎么又本地安装了平等普
前面的 -g 是大局安装,是为了施行你所编的 gulp 任务,即 gulp
yourTask。而后面的 –save-dev 是当地安装,是为着我们编写任务时利用 gulp
提供的 api,例如 gulp.src()gulp.task()gulp.dest()
等等。当然为是可一直使用全局安装的 gulp 的 api
的,但是明显不引进,因为这样干到 gulp 版本控制的题目,而且以全局
gulp 的 api
的语句就是见面产生环境因(你如果条件就全局安装了gulp,万一没装为,程序不纵有错了)。

进而以列之清目录下新建一个 gulpfile.js 文件,这是 gulp
的默认配置文件。

gulpfile.js 必须在项目根本目录?
理所当然也不过在其他目录,但这样的话就得在启动 gulp 任务时手动指定 gulp
配置文件 gulp yourTask –gulpfile yourGulpfilePath,可能还欲全局安装
gulp-cli,所以只有有特有需要,否则即坐落项目根本目录就执行了,这样最好简单易行。

配置文件的名务必是 gulpfile.js 吗?
免区分轻重缓急写,取成 gULPFile.js 的话语 gulp 也会认识,只要 toLowerCase
之后是 gulpfile 就行了,如果得到其它名字那您便以得用 –gulpfile
选项去指定了。

今工程目录结构都成了底的法:

图片 1

构建前 gulp 工程目录结构

紧接下就是于 gulpfile.js 里编写 gulp task(gulp
把为每个痛苦而耗时任务编写的处理办法称为一个 task):

const gulp = require('gulp');
const less = require('gulp-less');

gulp.task('build:less', function(){
    return gulp.src('./src/*.less')
        .pipe(less())
        .pipe(gulp.dest('./dist'));
});

末段就是是开拓一个巅峰,在顶峰里运行 gulp
build:less。好了,编译后底公文都让输出到了 dist 目录:

图片 2

构建后 gulp 工程目录结构

迄今你曾经算一个 gulp 砖家了,这多就是 gulp
的全部内容。怎么样,是勿是够简单,够丝滑。这吗是 gulp
的凸起特点——易于学习,易于使,五分钟成砖家。如果想使履行解决其他痛苦又耗时的职责,只需要下载安装对应之
gulp 插件包,然后挨家挨户类推写一个 gulp.task 出来就实施了。

这些源代码具体是何许让拍卖的
立即一般不欲关注,因为 gulp
插件包都也你办好了,并且封装的很精彩,你唯有需要报 gulp 你如啊,gulp
及其插件会支援你自点好合。这就算哼于你拿同份电子文档传进打印机,告诉其本身一旦一律客
A4 纸打印,呲呲呲~,打印机就吐出来一摆 A4
纸,上面是你的文档内容。源代码就是若的电子文档,gulp
插件就是是打印机,生成的可用文件就是您手里的那么张 A4
纸,你不要关心打印机内部是怎样工作的,因为她包裹的充分好,或者你可拿打印机拆了一样试究竟也行。

Gulp 是基于流的?
流(Stream)不是 gulp 创造的定义,而是由 unix 时代就算起来以的 I/O
机制,一直到现在仍以大使用。Node 封装了一个
stream
模块专门就此来对流动进行操作。gulp 所依据的流即是 Node 封装起的
stream。上面 gulp.task() 代码里面的
pipe
方法并无是 gulp 提供的 api,而是 node 的 api,准确之游说应该是 node 的
stream 模块提供的 api。具体是怎落实之也:gulp.src() 的返回值是 node
Stream 的一个实例,之后的 pipe 调用之实在是此实例的 pipe 方法,而
pipe 方法的返回值依然是 node Stream 实例,以此实现前面的
.pipe().pipe().pipe() 这种串联写法。熟悉 jQuery
的同窗应该很明亮这种技术。

Gulp 为何物

先行来听 Ta 的官网是怎说:

Gulp 致力于 自动化和优化 你的工作流,它是一个自动化你开工作吃
痛苦而耗时任务 的工具包。

想同一怀念我们普通的支出工作备受痛而耗时任务产生怎么样也?

  • 据此 es6,typescript 编写的台本文件需要编译成浏览器认识的 javascript
  • 就此 scss,less 编写的样式文件要编译成浏览器认识的 css
  • 自我批评代码是否符合书写规范,跑单元测试和合测试
  • 开发条件而发生 sourcemaps
    的语调试起来便有利于多了,修改完毕代码浏览器能自动刷新立即看到效果即使再好了
  • 养环境布置代码用减小合并静态文件,添加文件指纹控制缓存
  • blabla…更多的乃自己想吧

Gulp 声称要援助咱实现
自动化,那他是如何扶我们实现自动化的吧?这就只好先提取一嘴牛逼哄哄的
NodeJS

Node 背景有些知识

Node 使前端 Jser 有矣离浏览器工作的能力,要搁以前的讲话我们写的 js
要么嵌到 html 页面里,然后用浏览器打开 html
页面才能够运行js,要么就算是于浏览器开发者工具的 Console
面板里编写运行代码有。总之没了浏览器是宿主,咱们的 js 就 run
不起来。Node 这卖突发奇想,把开发者工具的 Console 给雕刻下来了,从此 js
可以脱离浏览器直接当 node 里运行。相当给 js
现在起矣少数只宿主环境,一个是浏览器,一个凡是 node
。当然了,Node
可不是开发者工具里之 Console,那不过是打个假设。它是因Chrome V8
引擎实现的一个 JavaScript 运行条件,功能实在类似 Console
面板,但提供了大气实用的 API,感兴趣之校友可通往
Node官网 详细摸底,英文吃力的骚年
戳这里。Node 可以算前端革命式的创新,随 node
一起发布之 node 包管理器 npm(node package manager)
也已经是全球最为酷之开源库生态系统。node/npm
这对准做一样发,前端生态迎来了生爆发,一时间也釜底抽薪各种问题之 node
包层出不穷,遍地开花。gulp 就是急流勇进,一路过五关斩六以闯出来的一个小
node 包。

扯谈完毕,接下去便来看看 gulp
是不是于装逼,他到底会免可知帮咱落实自动化。

作为一个 node 包,标准打开方式当然是:

npm i -g gulp

下一场呢,这里为编译 less 为条例,首先安装编译 less 需要利用的 node 包:

npm i --save-dev gulp gulp-less

前早已全局安装了 gulp 了,怎么又本地安装了同布满
前面的 -g 是大局安装,是以施行你所编写的 gulp 任务,即 gulp
yourTask。而背后的 –save-dev 是地面安装,是为我们编写任务时行使 gulp
提供的 api,例如 gulp.src()gulp.task()gulp.dest()
等等。当然为是得一直运用全局安装的 gulp 的 api
的,但是明显不引进,因为这样干到 gulp 版本控制的题目,而且采用全局
gulp 的 api
的语就是见面出环境因(你若条件都全局安装了gulp,万一没装为,程序不纵产生错了)。

跟着以列之彻底目录下新建一个 gulpfile.js 文件,这是 gulp
的默认配置文件。

gulpfile.js 必须在项目根本目录?
自然也只是在其他目录,但这样的话就得在启动 gulp 任务时手动指定 gulp
配置文件 gulp yourTask –gulpfile yourGulpfilePath,可能还得全局安装
gulp-cli,所以只有有突出需要,否则便坐落项目根本目录就执行了,这样最好简便。

布文件的名务必是 gulpfile.js 吗?
非区分轻重缓急写,取成 gULPFile.js 的口舌 gulp 也能够认识,只要 toLowerCase
之后是 gulpfile 就行了,如果获其它名字那若就算又得用 –gulpfile
选项去指定了。

如今工程目录结构都化为了下的金科玉律:

图片 3

构建前 gulp 工程目录结构

连通下就是以 gulpfile.js 里编写 gulp task(gulp
把为每个痛苦而耗时任务编写的处理方式称为一个 task):

const gulp = require('gulp');
const less = require('gulp-less');

gulp.task('build:less', function(){
    return gulp.src('./src/*.less')
        .pipe(less())
        .pipe(gulp.dest('./dist'));
});

末了就是是开拓一个极端,在极端里运行 gulp
build:less。好了,编译后底文书已让输出到了 dist 目录:

图片 4

构建后 gulp 工程目录结构

由来你曾算是一个 gulp 砖家了,这多就是 gulp
的全部内容。怎么样,是不是够简单,够丝滑。这吗是 gulp
的突出特色——易于学习,易于使,五分钟成砖家。如果想如果实施解决任何痛苦又耗时的职责,只需要下载安装对应之
gulp 插件包,然后挨家挨户类推写一个 gulp.task 出来就是尽了。

这些源代码具体是怎样吃拍卖的
即通常不需关爱,因为 gulp
插件包就为你做好了,并且封装的生良好,你不过待告诉 gulp 你一旦什么,gulp
及其插件会拉您于点好一切。这就是吓于你管同卖电子文档传进打印机,告诉它自己要是一如既往份
A4 纸打印,呲呲呲~,打印机就呕吐出来一布置 A4
纸,上面是公的文档内容。源代码就是您的电子文档,gulp
插件就是是打印机,生成的可用文件就是你手里的那张 A4
纸,你不用关心打印机内部是如何工作之,因为它包裹的不行好,或者您可以将打印机拆了千篇一律诈究竟也行。

Gulp 是基于流的?
流(Stream)不是 gulp 创造的概念,而是从 unix 时代就是开采取的 I/O
机制,一直到现在仍当周边应用。Node 封装了一个
stream
模块专门用来针对流动进行操作。gulp 所因的流即是 Node 封装起来的
stream。上面 gulp.task() 代码里面的
pipe
方法并无是 gulp 提供的 api,而是 node 的 api,准确之说该是 node 的
stream 模块提供的 api。具体是怎么落实的呢:gulp.src() 的返回值是 node
Stream 的一个实例,之后的 pipe 调用底实际是其一实例的 pipe 方法,而
pipe 方法的返回值依然是 node Stream 实例,以此实现前面的
.pipe().pipe().pipe() 这种串联写法。熟悉 jQuery
的同桌应该非常了解这种技能。

webpack 又是从哪冒出来的

gulp
似乎是包罗万象的,对前端开发工作中各个一样项痛苦又耗时任务还能够显现招拆招,各个击破。然而前端发展进度的快过想像,对页面性能与用户体验更追求极致,以至于
gulp 某些领域更加大型 SPA(单页应用)显得有些不够用了:

  • 单页应用之中坚是模块化,ES6 之前 JavaScript
    语言本身直白是未曾模块系统的,导致 AMD,CMD,UMD
    各种轮子模块化方案还跳出来。对这种模块化乱象,gulp
    显得力不从心,gulp
    插件对当时等同片呢绝非啊想法。不过也可知道,模块化解决方案可以是孰都能
    hold 住的,需要考虑的题材太多了;
  • 针对前方的 SPA 技术 gulp 处理起来显得有些束手无策,例如 Vue
    的单文件组件,gulp
    配合局部插件可以勉强处理,但是充分糟糕。其实说到底,还是模块化处理者的欠缺;
  • 优化页面加载速度之同一漫长第一法虽就是是抽 http 请求。gulp
    只是针对静态资源做流式处理,处理后并未开有效的优化重组,也就是说
    gulp
    忽略了系层面的处理,这无异于块还发生非常挺之优化空间,尤其是移动端,那才真正是一寸光阴一寸金啊,哪怕是几百毫秒的优化所带来的纯收入(用户?流量?付费?)绝对超乎你的想像。别与自己说
    gulp-concat,CSS
    Sprites,这俩玩意儿小打小闹还行,遇上巨型应用向拿不上台面。现在的页面动辄上百只繁缛资源(图片,样式表,脚本),也便是累累单
    http 请求,因此这优化需求要相当迫切的。关于为什么减少 http
    请求可以中降低页面加载时间戳这里。
  • blabla… 你协调想吧,主要就是重型单页应用方面产生短板;

时势造英雄。webpack 一信誉吼,大张旗鼓地开起了gulp 的墙角。

常规,先看看webpack官网怎么吹牛逼介绍自己之:

Webpack 是当下极度俏的前端资源模块化 管住以及包装
工具。它好用广大松散的模块按照依赖和规则打包成符合生产环境布置之前端资源。还得拿本需要加载的模块进行代码分割,等到实际得的时光还异步加载。

大凡休是圈了一脸懵逼,不明觉厉。其实翻译过来就是
“在自家眼里,什么都是模块”。webpack “万物都模块” 的观与 SPA
配合起来简直是金童玉女,天作之合。这吗是 webpack
短时间内名声大噪,直接撼动 gulp 地位的重中之重原因。

webpack
的意见比较前卫,它本身也带动了很多新的定义与情节,诸如加载器(loader)、依赖图(Dependency
Graph)等等。和 gulp 两小时成砖家的攻难度相比,webpack
或许你研究有限上仍会晕头转向。

联网下去大概看一下 webpack 的关键工作措施。

webpack 和 gulp 一样吗是一个小 node 包,打开方式自然是:

npm i -g webpack
npm i --save-dev webpack

与 gulp 一样,全局安装是为施行 webpack 任务,本地安装是为了采取
webpack 提供的 api。

安完 webpack 之后以列根本目录下新建一个 webpack.config.js,这是
webpack 的默认配置文件,同 gulp 的 gulpfile.js
的意义类似。webpack.config.js 同样是无分轻重缓急写的,取成
webPACk.CONfig.js 的言语 webpack
也会认识,但是取成其他名字或身处别的目录就需要动用 –config
选项去指定安排文件了。

如今工程目录结构如下:

图片 5

构建前webpack工程目录结构

搭下去便以 webpack.config.js 里配置需要的选取项,注意了,webpack 与 gulp
的要不同便是使方法 由编程式变成了配置式

const path = require('path');

module.exports = {
    entry: './src/index.js',        // 告诉 webpack 你要编译哪个文件
    output: {                       // 告诉 webpack 你要把编译后生成的文件放在哪
        filename: 'bundle.js',
        path: path.join(__dirname, 'dist')
    }
};

最后还是与 gulp 类似,就是在极端里运行
webpack(终端里一般会面世一样不胜坨编译信息)。好了,现在 webpack
已经将编译好之文本输出到了 dist 目录:

图片 6

构建后webpack工程目录结构

观看就是免是曾经一头雾水了,在公还从来不掌握有了啊的时候 webpack
已经拿事情涉及了了。这吗是 webpack 和 gulp 作业方式的最主要不同:Gulp
是搭了个台,让 gulp
插件在上面唱戏,尽情表演,所有构建相关的有血有肉工作还到由 gulp 插件去举行。而
Webpack 就牛逼了,webpack
先搭了个案子,然后自己以方唱嗨了,仔细一听,他于点唱的凡《我们无均等》,当然矣他吧是深受
webpack 插件在方唱戏的。

也就是说 webpack
把多职能都封装上了上下一心身体内,使得自己强大又臃肿。现在你得于
./src/index.js 文件里直接写 ES6 代码,因为 webpack 把编译 ES6
的做事都封装到自己的贯彻里了,使得 webpack 看起原生支持 ES6
而无需依赖第三正值插件,其实他其中也是为此了第三在插件的,所以你不用再特别去下一个
babel 之类的插件去转译
ES6。这样封装的益处是应用起来颇便利,不好的地方便是使用者完全无晓得有了什么,构建了了尚同样面子懵逼。

面才是 webpack 使用的太极端极端简便易行示例,简直连 “hello world”
都算不上。具体怎么打包各种资源(typescript,样式表,图片,字体等等)可去
webpack官网 深入学,想看中文的同室要劲
戳这里。

webpack “一切都模块” 的风味完美解决了端 gulp 暴露的几单短板,连
webpack 官网也说自己是为看到现存的模块打包器都未极端符合大型 SPA
应用,于是决定做一个合乎大型 SPA 应用的模块打包器,也就是说 webpack
其实就是啊大型 SPA
而杀的。

webpack 怎么落实像 gulp 一样对大量起源文件进行流式处理
居家 webpack 本来就从未有过打算开就从。webpack 不是盖替代 gulp
为目的的,而是以为大型 SPA
提供再好之构建方案。对大气自文件进行流式处理是 gulp 擅长的事,webpack
不思量不久,也从不必要尽快。即使抢,也仅仅是再造一个坏的 gulp 出来而已。

既然如此 webpack 模块化这么大,那以后模块化就全用 webpack 好了
webpack
模块化是强,但是他胖啊,不是有着人数都拿走得动,主要是他为了供更多之功能封装进了无以复加多东西,所以选择上还是需要因地制宜。如果就只是是包裹
js(多页应用往往是这种需求),完全可以动用 rollup,browserify
这种小如美的实现,因为她们单独做同宗事——打包js。而若用将图纸,样式,字体等有静态资源满打包,webpack
毫无疑问是首选。这吗是胡越来越多的流行库和框架初步于 webpack
转向使用 rollup 进行包装,因为她俩只是待打包 js,webpack
好多强作用向用不至。连 rollup 官网也坦言如果您以构建一个仓库,rollup
绝对是首选,但如若是构建一个运,那么要选 webpack。

webpack 又是于哪冒出来的

gulp
似乎是到的,对前端开发工作着列一样桩痛苦又耗时任务都能够展现招拆招,各个击破。然而前端发展快的快超过想象,对页面性能和用户体验越来越追求极致,以至于
gulp 某些圈子更加大型 SPA(单页应用)显得有点不够用了:

  • 单页应用的中坚是模块化,ES6 之前 JavaScript
    语言本身直白是无模块系统的,导致 AMD,CMD,UMD
    各种轮子模块化方案还跃出。对这种模块化乱象,gulp
    显得心有余而力不足,gulp
    插件对及时同一块吧并未什么想法。不过为堪知晓,模块化解决方案可以是谁还能
    hold 住的,需要考虑的题材最为多矣;
  • 本着前方的 SPA 技术 gulp 处理起来显得有点束手无策,例如 Vue
    的单文件组件,gulp
    配合局部插件可以勉强处理,但是那个糟糕。其实说到底,还是模块化处理方面的欠缺;
  • 优化页面加载速度之平等长重点法虽就是是削减 http 请求。gulp
    只是对静态资源做流式处理,处理后没有做有效的优化整合,也就是说
    gulp
    忽略了系统层面的拍卖,这无异于块还产生非常老的优化空间,尤其是移动端,那才真正是一寸光阴一寸金啊,哪怕是几百毫秒的优化所带的收益(用户?流量?付费?)绝对超越你的设想。别与自身说
    gulp-concat,CSS
    Sprites,这俩玩意儿小打小闹还行,遇上巨型应用向拿不齐台面。现在的页面动辄上百个繁缛资源(图片,样式表,脚本),也就是不少只
    http 请求,因此此优化需求要相当迫切的。关于为什么减少 http
    请求可以有效降低页面加载时间戳这里。
  • blabla… 你协调想吧,主要就是重型单页应用方面发生短板;

时势造英雄。webpack 一名誉吼,大张旗鼓地凿起了gulp 的墙角。

规矩,先看看webpack官网怎么吹牛逼介绍好之:

Webpack 是当下极度香的前端资源模块化 治本与包
工具。它好将许多麻木不仁的模块按照依赖和规则打包成符合生育环境布置的前端资源。还好将据需要加载的模块进行代码分割,等到实际得的时更异步加载。

凡是未是圈了一体面懵逼,不明觉厉。其实翻译过来就是
“在自己眼里,什么都是模块”。webpack “万物都模块” 的见识跟 SPA
配合起来简直是金童玉女,天作之合。这吗是 webpack
短时间内名声大噪,直接撼动 gulp 地位之严重性缘由。

webpack
的意比较前卫,它自身为牵动了成百上千初的定义和内容,诸如加载器(loader)、依赖图(Dependency
Graph)等等。和 gulp 两小时成砖家的就学难度相比,webpack
或许你研究有限上还是会晕头转向。

连下去大概看一下 webpack 的关键办事法。

webpack 和 gulp 一样也是一个小 node 包,打开方式自然是:

npm i -g webpack
npm i --save-dev webpack

和 gulp 一样,全局安装是为着施行 webpack 任务,本地安装是为利用
webpack 提供的 api。

装完 webpack 之后以品种根本目录下新建一个 webpack.config.js,这是
webpack 的默认配置文件,同 gulp 的 gulpfile.js
的机能相近。webpack.config.js 同样是不分轻重缓急写的,取成
webPACk.CONfig.js 的口舌 webpack
也克认得,但是取成其他名字或者在别的目录就用采用 –config
选项去指定安排文件了。

而今工程目录结构如下:

图片 7

构建前webpack工程目录结构

对接下去就在 webpack.config.js 里配置需要之选取项,注意了,webpack 与 gulp
的重点不同便是采取方式 出于编程式变成了配置式

const path = require('path');

module.exports = {
    entry: './src/index.js',        // 告诉 webpack 你要编译哪个文件
    output: {                       // 告诉 webpack 你要把编译后生成的文件放在哪
        filename: 'bundle.js',
        path: path.join(__dirname, 'dist')
    }
};

末尾仍然和 gulp 类似,就是于极限里运行
webpack(终端里一般会起同样非常坨编译信息)。好了,现在 webpack
已经把编译好之公文输出到了 dist 目录:

图片 8

构建后webpack工程目录结构

看来就是勿是早已一头雾水了,在公还没了解有了呀的时刻 webpack
已经将工作涉及了了。这吗是 webpack 和 gulp 作业方式的重要性不同:Gulp
是搭了只案子,让 gulp
插件在点唱戏,尽情表演,所有构建相关的具体作业还到由 gulp 插件去举行。而
Webpack 就牛逼了,webpack
先搭了只案子,然后自己在方唱嗨了,仔细一听,他以点唱的凡《我们不等同》,当然矣外呢是深受
webpack 插件在方唱戏的。

也就是说 webpack
把过多功力还封闭装上了上下一心身体里面,使得自己强大又臃肿。现在您得当
./src/index.js 文件里一直写 ES6 代码,因为 webpack 把编译 ES6
的工作既封装到祥和之落实里了,使得 webpack 看起原生支持 ES6
而休欲借助第三正值插件,其实他其中也是因此了第三正插件的,所以若不要再行特别去下一个
babel 之类的插件去转译
ES6。这样封装的益处是运用起来十分有益,不好的地方就是是使用者完全无了解发生了哟,构建了了还一致脸懵逼。

点就是 webpack 使用的无比极致极致简单易行示例,简直连 “hello world”
都算不齐。具体怎么打包各种资源(typescript,样式表,图片,字体等等)可过去
webpack官网 深入学习,想看中文的同校要劲
戳这里。

webpack “一切皆模块” 的特性完美解决了点 gulp 暴露的几只短板,连
webpack 官网也说自己是以观看现存的模块打包器都非绝符合大型 SPA
应用,于是决定做一个切大型 SPA 应用的模块打包器,也就是说 webpack
其实就是也重型 SPA
而非常之。

webpack 怎么落实像 gulp 一样对大量起源文件进行流式处理
每户 webpack 本来就不曾打算开就事。webpack 不是因代表 gulp
为目的的,而是为了给大型 SPA
提供再好的构建方案。对大气来文件进行流式处理是 gulp 擅长的事,webpack
不思量快,也未尝必要尽快。即使抢,也无非是再造一个坏的 gulp 出来而已。

既是 webpack 模块化这么大,那以后模块化就全用 webpack 好了
webpack
模块化是大,但是他胖啊,不是有着人数犹得到得动,主要是他为提供更多之职能封装进了最为多东西,所以选择上或者要因地制宜。如果只是只是是包
js(多页应用往往是这种求),完全可采取 rollup,browserify
这种多少若得意的兑现,因为她们仅开同样起事——打包js。而如果急需以图片,样式,字体等有着静态资源全包装,webpack
毫无疑问是首选。这为是怎么越来越多之流行库和框架初步起 webpack
转向使用 rollup 进行打包,因为她俩仅仅需要打包 js,webpack
好多强力量向用无交。连 rollup 官网也坦言要您以构建一个库,rollup
绝对是首选,但若是是构建一个采用,那么请选 webpack。

结论

我看博总人口说 gulp 和 webpack
不是一致近乎东西,我非这样当,虽然说两者的视角确实是无等同的,gulp
走之是流式处理途径,webpack
走的凡模块处理途径,但是双方所假设达的对象也是同的,那便是力促前端领域的自动化和工程化管理。webpack
发展至如今,已经大强劲了,强大到以构建方面 gulp 能做的从 webpack
基本上都得胜任,gulp 举行不了之 webpack
也克打出。同样的那些开发工作遭到痛又耗时的任务,gulp 和 webpack
都能缓解,只是解决思路发生天壤之别。

下表是自各个角度对 gulp 和 webpack 做的相比:

Gulp Webpack
定位 基于流的自动化构建工具 一个万能模块打包器
目标 自动化和优化开发工作流,为通用 website 开发而生 通用模块打包加载器,为移动端大型 SPA 应用而生
学习难度 易于学习,易于使用,api总共只有5个方法 有大量新的概念和api,不过好在有详尽的官方文档
适用场景 基于流的作业方式适合多页面应用开发 一切皆模块的特点适合单页面应用开发
作业方式 对输入(gulp.src)的 js,ts,scss,less 等源文件依次执行打包(bundle)、编译(compile)、压缩、重命名等处理后输出(gulp.dest)到指定目录中去,为了构建而打包 对入口文件(entry)递归解析生成依赖关系图,然后将所有依赖打包在一起,在打包之前会将所有依赖转译成可打包的 js 模块,为了打包而构建
使用方式 常规 js 开发,编写一系列构建任务(task)。 编辑各种 JSON 配置项
优点 适合多页面开发,易于学习,易于使用,接口优雅。 可以打包一切资源,适配各种模块系统
缺点 在单页面应用方面输出乏力,而且对流行的单页技术有些难以处理(比如 Vue 单文件组件,使用 gulp 处理就会很困难,而 webpack 一个 loader 就能轻松搞定) 不适合多页应用开发,灵活度高但同时配置很繁琐复杂。“打包一切” 这个优点对于 HTTP/1.1 尤其重要,因为所有资源打包在一起能明显减少浏览器访问页面时的资源请求数量,从而减少应用程序必须等待的时间。但这个优点可能会随着 HTTP/2 的流行而变得不那么突出,因为 HTTP/2 的多路复用可以有效解决客户端并行请求时的瓶颈问题。
结论 浏览器多页应用(MPA)首选方案 浏览器单页应用(SPA)首选方案

gulp 为何无吸取百小之长,把 webpack 的事物并进来,反正都是开源的
腾讯那么牛逼,你说他怎么不把阿里巴巴合并进来。集成应该是绝非可能,因为
gulp 和 webpack
的定势不均等。所以,没有放的世而清一色以的缓解方案,只有切实问题具体分析选择符合之化解方案才能够正确地缓解问题。gulp
与 webpack 只是我们缓解问题之家伙,不要为工具束缚了手脚不能够提高。

闲聊了这般多,到底谁会吃磕碰大于沙滩上
可扣押下,这点儿独器其实各个发生优缺,都有用武之地。合理地配合下,取长补短,才会发表极其深的威力,所以这俩基友并无是轧的,而是增补的,谁呢非会见叫拍好在沙滩及。

结论

我看众人口说 gulp 和 webpack
不是同样近似东西,我未这么觉得,虽然说两者的着眼点确实是休一致的,gulp
走的凡流式处理途径,webpack
走的凡模块处理途径,但是两者所假设达标的目标也是千篇一律的,那便是推进前端领域的自动化和工程化管理。webpack
发展到如今,已经特别强劲了,强大到当构建方面 gulp 能做的从业 webpack
基本上还可胜任,gulp 举行不了的 webpack
也克作。同样的那些开发工作遭到痛又耗时的天职,gulp 和 webpack
都能缓解,只是解决思路发生天壤之别。

下表是起各个角度对 gulp 和 webpack 做的对立统一:

Gulp Webpack
定位 基于流的自动化构建工具 一个万能模块打包器
目标 自动化和优化开发工作流,为通用 website 开发而生 通用模块打包加载器,为移动端大型 SPA 应用而生
学习难度 易于学习,易于使用,api总共只有5个方法 有大量新的概念和api,不过好在有详尽的官方文档
适用场景 基于流的作业方式适合多页面应用开发 一切皆模块的特点适合单页面应用开发
作业方式 对输入(gulp.src)的 js,ts,scss,less 等源文件依次执行打包(bundle)、编译(compile)、压缩、重命名等处理后输出(gulp.dest)到指定目录中去,为了构建而打包 对入口文件(entry)递归解析生成依赖关系图,然后将所有依赖打包在一起,在打包之前会将所有依赖转译成可打包的 js 模块,为了打包而构建
使用方式 常规 js 开发,编写一系列构建任务(task)。 编辑各种 JSON 配置项
优点 适合多页面开发,易于学习,易于使用,接口优雅。 可以打包一切资源,适配各种模块系统
缺点 在单页面应用方面输出乏力,而且对流行的单页技术有些难以处理(比如 Vue 单文件组件,使用 gulp 处理就会很困难,而 webpack 一个 loader 就能轻松搞定) 不适合多页应用开发,灵活度高但同时配置很繁琐复杂。“打包一切” 这个优点对于 HTTP/1.1 尤其重要,因为所有资源打包在一起能明显减少浏览器访问页面时的资源请求数量,从而减少应用程序必须等待的时间。但这个优点可能会随着 HTTP/2 的流行而变得不那么突出,因为 HTTP/2 的多路复用可以有效解决客户端并行请求时的瓶颈问题。
结论 浏览器多页应用(MPA)首选方案 浏览器单页应用(SPA)首选方案

gulp 为何无吸取百家的长,把 webpack 的东西并进来,反正都是开源之
腾讯那么牛逼,你说他怎么不将阿里巴巴合并进来。集成应该是绝非可能,因为
gulp 和 webpack
的一贯不均等。所以,没有放的世而全以的解决方案,只有切实问题具体分析选择切合之缓解方案才能够正确地化解问题。gulp
与 webpack 只是我们解决问题之家伙,不要吃工具束缚了动作不可知提高。

拉了这般多,到底何许人也会吃撞击好于沙滩及
可拘留出来,这点儿只器其实各个发生优缺,都有用武之地。合理地兼容使用,取长补短,才能够表达极其充分之威力,所以这俩基友并无是排斥的,而是上的,谁吧不见面叫击大于沙滩上。

相关文章