理解 Gulp 和 Webpack(转)
Gulp 和 webpack 之间的关系是十分暧昧的,却也经常被人误解,以为它俩是竞争关系,其实不然。
Gulp 是一个任务管理工具,让简单的任务更清晰,让复杂的任务易于掌控;而 webpack 的理念是,一切皆为模块,每个模块在打包的时候都会经过一个叫做 loader 的东西,它具备非常强大的精细化管理能力,主要解决的是依赖分析问题。
Gulp 的学习,搞清楚 gulp.src
, gulp.dest
, gulp.task
, gulp.watch
四个 API 就差不多了,它的底层原理是使用 Node 的 Transform Streams,这是一个可读可写可做中间转换的 Streams 管道,由于从 src 到 dest 过程中,文件一直停留在 Streams 中,没有落地成为实体文件,所以整体运作效率非常高。
Webpack 概念很多,但搞清楚 entry
,output
和 loader
三个关键点,基本上就可以解决简单的问题了,稍微复杂的场景主要包括对资源的合并处理、分拆处理、多次打包等,部分这样的问题可以使用插件辅助解决,但是 Webpack 的强大并不在文件处理,而是依赖分析,所以在流程操作特别复杂的情况,webpack 并不能胜任工作,往往会被作为 gulp 的一个 task,整体工作流交给 gulp 主导。
插件推荐
下面推荐几个 gulp 的插件吧,比较常用的:
gulp-load-plugins
:自动加载 package.json 中的 gulp 插件gulp-rename
: 重命名gulp-uglify
:文件压缩gulp-concat
:文件合并gulp-less
:编译 lessgulp-sass
:编译 sassgulp-clean-css
:压缩 CSS 文件gulp-htmlmin
:压缩 HTML 文件gulp-babel
:使用 babel 编译 JS 文件gulp-jshint
:jshint 检查gulp-imagemin
:压缩 jpg、png、gif 等图片gulp-livereload
:当代码变化时,它可以帮我们自动刷新页面
也推荐几个 webpack 常用的 loader 和 plugin:
- Loader 列表
less-loader, sass-loader
:处理样式url-loader, file-loader
:两个都必须用上。否则超过大小限制的图片无法生成到目标文件夹中babel-loader,babel-preset-es2015,babel-preset-react
:js 处理,转码expose-loader
: 将 js 模块暴露到全局
- Plugin 列表
NormalModuleReplacementPlugin
:匹配 resourceRegExp,替换为 newResourceContextReplacementPlugin
:替换上下文的插件IgnorePlugin
:不打包匹配文件PrefetchPlugin
:预加载的插件,提高性能ResolverPlugin
:替换上下文的插件DedupePlugin
:打包的时候删除重复或者相似的文件MinChunkSizePlugin
:把多个小模块进行合并,以减少文件的大小LimitChunkCountPlugin
:限制打包文件的个数MinChunkSizePlugin
:根据 chars 大小,如果小于设定的最小值,就合并这些小模块,以减少文件的大小OccurrenceOrderPlugin
:根据模块调用次数,给模块分配 ids,常被调用的 ids 分配更短的 id,使得 ids 可预测,降低文件大小,该模块推荐使用UglifyJsPlugin
:压缩 jsCommonsChunkPlugin
:多个 html 共用一个 js 文件(chunk)HotModuleReplacementPlugin
:模块热替换么,如果不在 dev-server 模式下,需要记录数据,recordPath,生成每个模块的热更新模块ProgressPlugin
:编译进度NoErrorsPlugin
:报错但不退出 webpack 进程HtmlWebpackPlugin
:生成 html
理解 Gulp 和 Webpack(转)的更多相关文章
- 【简单理解】gulp和webpack的区别
Gulp和Webpack的基本区别: gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加 ...
- Grunt、Gulp区别 webpack、 requirejs区别
1. 书写方式 grunt 运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项,诸如option,src,dest等等.而且不同的插件可能会有自己扩展字段,导致认知成本的提高,运用的时候 ...
- Gulp和Webpack对比
在现在的前端开发中,前后端分离.模块化开发.版本控制.文件合并与压缩.mock数据等等一些原本后端的思想开始逐渐渗透到“大前端”的开发中.前端开发过程越来越繁琐,当今越来越多的网站已经从网页模式进化到 ...
- 前端架构gulp与webpack(知识点整理)
一 概念介绍 gulp 是 task runner,Webpack 是 module bundler.可以这么说, Webpack 和 gulp 本身都有 95% 的功能是不能被对方替代,或者直接说和 ...
- [转]基于gulp和webpack的前端工程化
本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- Gulp和webpack的区别,是一种工具吗?
疑问:gulp和webpack 什么关系,是一种东西吗?可以只用gulp,不用webpack吗 或者反过来? 它们的区别和概念 ------------------------------------ ...
- JavaScript自动化构建工具入门----grunt、gulp、webpack
蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css 需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动 自动化时代的程序员: 希望一切都可以自动完成 ...
- gulp与webpack的区别
gulp gulp强调的是前端开发的工作流程,我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并.雪碧图.启动server.版本控制等),然后定义执行顺序,来让gulp执行这 ...
随机推荐
- 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader
不多说,直接上干货! IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. IO流按操作数据分为两种:字节流和字符流. IO流按流向分为:输 ...
- React.js 小书 Lesson7 - 组件的 render 方法
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson7 转载请注明出处,保留原文链接和作者信息. React.js 中一切皆组件,用 React. ...
- C++ stl vector介绍
转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...
- [转] Java集合类详解
集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...
- Log4.Net日志记录解析
http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.html
- Git如何解决冲突
解决冲突 现在我把gitTest中的东西全删了包括那个.git文件. 初始化仓库git init,新建一个a.txt,在里边写个master,执行git add a.txt,然后执行git commi ...
- three.js一个简单demo学些和讲解
叉口裁剪球体案例 二话不说先上效果图: 全部代码带注释 <!DOCTYPE html> <html lang="en"> <head> < ...
- Windows server 2008 sp2 X64安装sharepoint2007出现兼容性问题无法安装 解决办法
当你兴冲冲配置好了AD IIS .Net3.0.安装好了SQL2005,打完了sp3补丁,正准备点击sharepoint2007setup.exe安装的时候. 电脑却莫名奇妙提示了一个无法兼容的错误, ...
- oracle 递归查询(来源于网络)
比如 a b a c a e b b1 b b2 c c1 e e1 e e3 d d1 指定parent=a,选出 a b a c a e b ...
- ActionMethod_DMI_动态方法调用
Action执行的时候并不一定要执行execute方法可以在配置文件中配置Action的时候用method=来指定执行那个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐) 动态方法调用 ...