博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gulp与webpack的区别
阅读量:4555 次
发布时间:2019-06-08

本文共 1763 字,大约阅读时间需要 5 分钟。

常有人拿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可以实现一些相同功能,如下(列举部分):

功能 gulp webpack
文件合并与压缩(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一起用。

转载于:https://www.cnblogs.com/theWayToAce/p/7550030.html

你可能感兴趣的文章
Git学习笔记 1,GitHub常用命令1
查看>>
详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
查看>>
php引用计数与变量引用
查看>>
UITableView移动
查看>>
linux 查看自己所在的公网ip
查看>>
CF798C Mike and gcd problem
查看>>
CF975D Ghosts
查看>>
springboot-11-servlet, listener, fitlter的添加
查看>>
《你的灯亮了吗》阅读笔记
查看>>
js,需要更多源字符
查看>>
使用Verdi理解RTL design
查看>>
Coolpy使用教程
查看>>
[小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建
查看>>
Zookeeper Watcher 解析
查看>>
如何在K3查找BOS单据在哪个子系统中
查看>>
光流optical flow基本原理与实现
查看>>
Ubuntu系统里如何正确卸载oracle-j2sdk1.6(图文详解)
查看>>
Entity Framework加载相关实体——Eager Loading
查看>>
装饰器基本原理
查看>>
C#基础 [01] 从Hello World 开始
查看>>