当前位置: 首页 > news >正文

gulp与webpack的区别

常有人拿gulp与webpack来比较,知道这两个构建工具功能上有重叠的地方,可单用,也可一起用,但本质的区别就没有那么清晰。

gulp

gulp强调的是前端开发的工作流程,我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并、雪碧图、启动server、版本控制等),然后定义执行顺序,来让gulp执行这些task,从而构建项目的整个前端开发流程。

PS:简单说就一个Task Runner

webpack

webpack是一个前端模块化方案,更侧重模块打包,我们可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源。

PS:webpack is a module bundle

相同功能

gulp与webpack可以实现一些相同功能,如下(列举部分):

功能gulpwebpack
文件合并与压缩(css)使用gulp-minify-css模块
gulp.task('sass',function(){
     gulp.src(cssFiles)
     .pipe(sass().on('error',sass.logError))
     .pipe(require('gulp-minify-css')())
     .pipe(gulp.dest(distFolder));
});
样式合并一般用到extract-text-webpack-plugin插件,
压缩则使用webpack.optimize.UglifyJsPlugin。
文件合并与压缩(js)使用gulp-uglify和gulp-concat两个模块js合并在模块化开始就已经做,
压缩则使用webpack.optimize.UglifyJsPlugin
sass/less预编译使用gulp-sass/gulp-less 模块sass-loader/less-loader 进行预处理
启动server使用gulp-webserver模块
var webserver =require('gulp-webserver');
gulp.task('webserver',function(){
     gulp.src('./')
     .pipe(webserver({
          host:'localhost',
          port:8080,
          livereload:true, //自动刷新
          directoryListing:{
               enable: true,
               path:'./'
          },
     }));
});
使用webpack-dev-server模块
module.exports = {
     ......
     devServer: {
          contentBase: "build/",
          port:8080,
          inline: true //实时刷新
     }
}
版本控制使用gulp-rev和gulp-rev-collector两个模块将生成文件加上hash值
module.exports = {
     ......
    output: {
        ......
        filename: "[name].[hash:8].js"
    },
     plugins:[
          ......
          new ExtractTextPlugin(style.[hash].css")
     ]
}
两者区别

虽然都是前端自动化构建工具,但看他们的定位就知道不是对等的。

gulp严格上讲,模块化不是他强调的东西,他旨在规范前端开发流程。

webpack更是明显强调模块化开发,而那些文件压缩合并、预处理等功能,不过是他附带的功能。

总结

gulp应该与grunt比较,而webpack应该与browserify(网上太多资料就这么说,这么说是没有错,不过单单这样一句话并不能让人清晰明了)。

gulp与webpack上是互补的,还是可替换的,取决于你项目的需求。如果只是个vue或react的单页应用,webpack也就够用;如果webpack某些功能使用起来麻烦甚至没有(雪碧图就没有),那就可以结合gulp一起用。

 

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/6413546.html      



本文转自 海角在眼前 博客园博客,原文链接: http://www.cnblogs.com/lovesong/p/6413546.html  ,如需转载请自行联系原作者

相关文章:

  • 5. Pycharm 安装、设置、运行
  • 3. Mac 下安装python
  • jQuery的弹出窗口插件colorbox
  • 在TreeCtrl中使用Edit功能
  • 每个分类取最新的几条的SQL实现
  • 第100篇博文纪念 | C# 根据数据库表结构生成DOC数据库文档(1)
  • Drawable、Bitmap、Canvas和Paint的关系以及部分使用方法
  • 嫌访问速度慢?教你秒速打开你的WordPress
  • 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-1导入JavaScript插件
  • 借用Snippet插件美化博客中的代码
  • Python的CSV模块
  • IT运维管理之自动化运维篇
  • zookeeper分布式安装
  • 百度面试题:求绝对值最小的数
  • 3-9 读写缓存流 ——BufferedStream类
  • 「面试题」如何实现一个圣杯布局?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017 年终总结 —— 在路上
  • HashMap剖析之内部结构
  • js面向对象
  • MaxCompute访问TableStore(OTS) 数据
  • miaov-React 最佳入门
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Selenium实战教程系列(二)---元素定位
  • windows下使用nginx调试简介
  • yii2权限控制rbac之rule详细讲解
  • 基于Android乐音识别(2)
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用putty远程连接linux
  • const的用法,特别是用在函数前面与后面的区别
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​configparser --- 配置文件解析器​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (九)One-Wire总线-DS18B20
  • (三)uboot源码分析
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)详解PHP处理密码的几种方式
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • ./configure,make,make install的作用(转)
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • @Responsebody与@RequestBody
  • [].slice.call()将类数组转化为真正的数组
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [AIGC] Redis基础命令集详细介绍