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.mzph.cn/news/291444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...

数据结构与算法Python版-中国大学mooc-试题题目及答案更多相关问题婴儿出生一两天后就有笑的反应,这种笑的反应属于()。【判断题】填制原始凭证,汉字大写金额数字一律用正楷或草书书写,汉字大写金额数字到元位或角位为止的,后面必…

使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构

在将一个 .NET CORE \ .NET 5.0 \ .NET 6.0 程序进行独立部署发布时,会在发布目录产生很多系统类库,导致目录非常不简洁。这给寻找入口程序造成了困难,特别是路遥工具箱这种绿色软件,不会在开始菜单、系统桌面创建快捷方式&#x…

关于注释

在编写程序时,应当给程序添加一些注释,用于说明某段代码的作用,或者说明某个类的用途,某个方法的功能,以及该方法的参数和返回值类型和意义等。 很多初学者开始学习编程语言时,会很努力写程序,但…

从此不再惧怕URI编码:JavaScript及C# URI编码详解

混乱的URI编码 JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString JavaScript中的还好,只提供了三个,C#中主要用的…

ios之最简单的程序

1、构建学生对象并且打印相关信息 代码&#xff1a;#import <UIKit/UIKit.h> #import "AppDelegate.h"interface Student : NSObject //变量 property NSString *name; property int age; property float score;//method -(void)show;endimplementation Studen…

网站前端_EasyUI.基础入门.0009.使用EasyUI Layout组件的最佳姿势?

1. 基础布局<div id"l" class"easyui-layout" data-options"width:500,height:250"><div data-options"region:north,title:north,height:50"></div><div data-options"region:west,title:west,width:100&q…

MySQL数据库如何管理与维护_mysql数据库的管理与维护

mysql数据库的管理与维护云服务器(Elastic Compute Service&#xff0c;简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天然气等公共资源一样…

[转载]Javascript异步编程的4种方法

NodeJs的最大特性就是"异步" 目前在NodeJs里实现异步的方法中&#xff0c;使用“回调”是最常见的。 其实还有其他4种实现异步的方法&#xff1a; 在此以做记录 --- http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html --- 你可能知道&am…

继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17

大家好&#xff0c;我是君哥。新版任你发&#xff0c;我用 Java 8&#xff0c;这可能是当下 Java 开发者的真实写照。不过时代可能真的要抛弃 Java 8&#xff0c;全面拥抱 Java 17 了。Spring Boot 3.0前些天&#xff0c;相信小伙伴们都注意到了&#xff0c;SpringBoot 发布了 …

文件下载

2019独角兽企业重金招聘Python工程师标准>>> public String downloadFile() {try {if (id ! null && !"".equals(id) && !"null".equals(id)) {ResourceFile rf resourceFile.getResourceFile(id);filename new String(rf.ge…

ios之Xcode工程中添加文件常用快捷键

1、Xcode某个工程中添加文件 有两种方式&#xff1a; 方式一&#xff1a;“command”&#xff0b;“n”&#xff0c;弹出添加文件对话框。 方式二&#xff1a;在需要添加文件的工程目录下右键&#xff0c;选择“New File…”。 以上方式Xcode会弹出下面的对话框&#xff1…

递归-字符串翻转

代码&#xff1a; #include <iostream> #include <string>using namespace std;string F(string _str) {if(_str.length() < 1) return _str;return F(_str.substr(1)) _str.at(0); }int main() {string str "ABCDEF";cout << F(str);return …

中国大学mooc慕课python语言程序设计答案_中国大学MOOC(慕课)_Python语言程序设计基础_网课答案...

参考答案如下有一堆零件( 100---200 之间)&#xff0c;中国如果分成 4 个零件一组的若干组&#xff0c;中国则多 2 个零件&#xff1b;若分成 7 个零件一组&#xff0c;则多 3 个零件&#xff1b;若分 9 个零件一组&#xff0c;则多 5 个零件。下面程序是求这堆零件的总数&…

想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)

前言上回&#xff0c;我们使用最小 WEB API 实现文件上传功能&#xff08;《想说爱你不容易 | 使用最小 WEB API 实现文件上传》&#xff09;&#xff0c;虽然客户端访问是正常的&#xff0c;但是当打开 Swagger 页面时&#xff0c;发现是这样的&#xff1a;没法使用 Swagger 页…

Eclipse将引用了第三方jar包的Java项目打包成jar文件

第一步&#xff1a;建议手动 Eclipse插件fatjar 安装方法&#xff1a;1&#xff1a;下载地址&#xff1a;http://downloads.sourceforge.net/fjep/net.sf.fjep.fatjar_0.0.27.zip?modtime1195824818&big_mirror0 2&#xff1a;将解压出的plugins中的文件夹&#xff08;net…

sql多表查询之一:Where 和 On的秘密

原文 sql多表查询之一&#xff1a;Where 和 On的秘密 对于还在SQL初级阶段的朋友来说&#xff0c;sql多表查询问题是一个比较有趣也容易出错的技术。什么时候会用到sql多表查询呢&#xff1f;是在两张或两张以上表单中通过某几个字段进行互联管理的时候&#xff0c;这就不得不说…

linux之vim常见配置

1、打开vim配置文件 vim ~/.vimrc 2、添加部分配置 去掉讨的关vi一致性模式,避免以前版本的一些bug和局限 set nocompatible 显示行号 set number 检测文件的类型 filetype on 记录历史的行数 set history=1000 背景使用黑色(已经测试这个没有什么效果),加了会报错,建议大…

初学Hibernate

持久化&#xff1a; 自从学习Hibernate以来&#xff0c;这个词是见得最多的一个词了。我觉得有时候想问题不要太复杂了&#xff0c;所谓的持久化就是将项目中产生的各种数据存到数据库中去&#xff0c;就是这么简单。 持久层就是将数据写入到数据库中去&#xff0c;以及从…

mysql 多数据库事务_多数据库事务处理

看见园子里面一位高人写了一篇多数据库事务处理的东西&#xff0c;觉得很有意思&#xff0c;把它重写了一下。在一个数据库中实现事务是没什么问题&#xff0c;当时项目中常常会遇到多个数据库交叉事务的情况&#xff0c;这个方法使用两个SqlTransaction 来处理这两个数据库中的…

C#中类的override和virtual

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言昨天和大家一起学习类的派生&#xff0c;知道派生类和基类的区别。今天咱们一起看看派生类和基类的虚方法和覆写方法是如何使用的。我们使用基类引用访问派生类对象时&#xff0c;得到的是基类的成员。当使用虚…