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

阅读需要 18,阅读需要 18

翻阅目录

阅读目录

  • 美好之前端开发流程
  • 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 的重大办事办法。

webpa澳门蒲京网址ck 和 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 只是我们解决问题之家伙,不要吃工具束缚了动作不可知提高。

侃了这样多,到底谁会于磕碰好在沙滩及
得看下,这有限单器其实每出优缺,都有用武之地。合理地兼容以,取长补短,才能够表达最酷之威力,所以这俩基友并无是轧的,而是上的,谁吗非会见于磕碰好在沙滩上。