在Gulp中创建一个库从磁盘gulp.src读取源文件并通过磁盘管道写回内容到gulp.dest,可以理解成只是将文件复制到另一个目录。
  1. var gulp = require('gulp');
  2. gulp.task('build', function () {
  3. return gulp
  4. .src('./sample.js')
  5. .pipe(gulp.dest('./build'));
  6. });

复制文件完成了,但是它没有压缩这个JS文件。要做到这一点,你必须使用一个Gulp插件。在这种情况下,你可以使用gulp-uglify,流行的UglifyJS压缩编绎插件

  1. var gulp = require('gulp');
  2. var uglify = require('gulp-uglify');
  3. gulp.task('build', function () {
  4. return gulp
  5. .src('./sample.js')
  6. .pipe(uglify())
  7. .pipe(gulp.dest('./build'));
  8. });

流使可以让您添加更多的插件,而只需要读取和写入磁盘一次。你也可以指定缓冲器中内容的大小。需要注意的是,如果你在压缩之前添加它,那么你得到的大小是unminified。

  1. var gulp = require('gulp');
  2. var uglify = require('gulp-uglify');
  3. var size = require('gulp-size');
  4. gulp.task('build', function () {
  5. return gulp
  6. .src('./sample.js')
  7. .pipe(uglify())
  8. .pipe(size())
  9. .pipe(gulp.dest('./build'));
  10. });

Gulp的核心API只有5个,掌握了5个API就学会了Gulp,之后便可以通过管道流组合自己想要的任务。

  • gulp.task(name[, deps], fn):注册任务
  • name 是任务名称;deps 是可选的数组,其中列出需要在本任务运行要执行的任务;fn 是任务体,这是 gulp.js 的核心了,需要花时间吃透它,详情见此。
  • gulp.src(globs[, options]):指明源文件路径
  • 用过 Grunt 的话,globs 一定不会陌生,这里没什么变化;options 是可选的,具体请查看 gulp.js API
  • gulp.dest(path):指明任务处理后的目标输出路径
  • gulp.watch(glob[, options], tasks)/gulp.watch(glob[, options, cb]):监视文件的变化并运行相应的任务。你没看错,watch 作为核心 API 出现在 gulp.js 里了,具体用法还是要多看文档,不过接下来我们会演示简单的例子。
  1. var gulp = require('gulp');
  2. var jshint = require('gulp-jshint');
  3. var concat = require('gulp-concat');
  4. var uglify = require('gulp-uglify');
  5. var rename = require('gulp-rename');
  6.  
  7. // 语法检查
  8. gulp.task('jshint', function () {
  9. return gulp.src('src/*.js')
  10. .pipe(jshint())
  11. .pipe(jshint.reporter('default'));
  12. });
  13.  
  14. // 合并文件之后压缩代码
  15. gulp.task('minify', function (){
  16. return gulp.src('src/*.js')
  17. .pipe(concat('all.js'))
  18. .pipe(gulp.dest('dist'))
  19. .pipe(uglify())
  20. .pipe(rename('all.min.js'))
  21. .pipe(gulp.dest('dist'));
  22. });
  23.  
  24. // 监视文件的变化
  25. gulp.task('watch', function () {
  26. gulp.watch('src/*.js', ['jshint', 'minify']);
  27. });
  28.  
  29. // 注册缺省任务
  30. gulp.task('default', ['jshint', 'minify', 'watch']);
 
Grunt和Gulp区别:
grunt优点
grunt的功能说来简单,就是管理一系列的Task。大部分的Task都是第三方的插件,安装好对应的NPM包,再loadNpmTasks就可以用了。它能使程序员使用JavaScript构建编绎工具时,几乎不费吹灰之力。你只需要寻找合适的插件,阅读它们的文档,然后安装和配置它。有基础足够大的插件库,几乎不需要开发自己的编译任务。
grunt缺点:
1.插件很难遵守单一责任原则。因为 Grunt 的 API 设计缺憾,使得许多插件不得不负责一些和其主要任务无关的事情。比如说要对处理后的文件进行更名操作,你可能使用的是 uglify 插件,也有可能使用的是 concat 插件(取决于工作流的最后一个环节是谁)。
2.用插件做一些本来不需要件来做的事情。因为 Grunt 提供了统一的 CLI 入口,子任务由插件定义,由 CLI 命令来调用执行,因此哪怕是很简单的外部命令(比如说运行 karma start)都得有一个插件来负责封装它,然后再变成 Grunt CLI 命令的参数来运行,多此一举。试图用配置文件完成所有事,结果就是混乱不堪
3.如果你有一个明显复杂的编绎过程,它可能会变得过于冗长。当开发一段时间以后,它往往很难将编绎过程作为一个整体。一旦你编绎流程任务到达两位数,几乎可以保证,你会发现自己不得不在多个目标(Targets)中跑同一个Task,以便你能够正确地执行任务流。由于任务是需要声明配置的,你也很难弄清楚任务真正的执行次序。需要为每个任务(或者每个编绎流)编写一份独立的配置文件,供你的团队使用。
4.Gruntfile维护起来困难。配置和运行分离: 配置Task和调用它们的地方离得很远;每个插件做的事太多:每个Task的结果必须写到磁盘文件,另一个Task再读;配置项过多:每个插件的配置规则还不尽相同。用每个插件,都得去学习一番。
 
Gulp
Gulp基于Node JS的一个机制,叫做stream,Gulp的每个插件从stream中读取输入,做一些处理,再输出到stream中。 每个插件不是拿来独立使用的。相反,它专注于完成单一职责。只有把合适的插件组合起来,才能完成具体的Task。前一级的输出,直接变成后一级的输入。Grunt有一个Grunt-Cli,而Gulp直接安装Gulp就行了。npm install -g gulp而Grunt的配置文件叫Gruntfile.js,而Gulp是gulpfile.js。

gulp.js 的五大特点:

1.使用 gulp.js,你的构建脚本是代码,而不是配置文件;

2.使用标准库(node.js standard library)来编写脚本;

3.插件都很简单,只负责完成一件事-基本上都是 20 行左右的函数;

4.任务都以最大的并发数来执行;

5.输入/输出(I/O)是基于“流式”的。

参考:

Gulp、Grunt构建工具的更多相关文章

  1. 关于node.js和npm,cnpm的安装记录以及gulp自动构建工具的使用

    关于node.js和npm,cnpm的安装记录以及gulp自动构建工具的使用   工作环境:window下 在一切的最开始,安装node.js (中文站,更新比较慢http://nodejs.cn/) ...

  2. Grunt构建工具能做哪些事?

    Grunt到底有什么作用?一般用来干嘛? 很多前端的工作,包括Less编译.javascript压缩.Css压缩等零零碎碎的工作, 都可以让Grunt来做. 实际上在项目开发中,一般是前端代码 与 后 ...

  3. gulp自动化构建工具的使用

    gulp自动化构建工具: 把前端开发常见的处理(“搬砖”)程序,通过一个工具模块管理起来,只需配置一次,达到自动处理目的,简化开发,提高效率!! 安装: 1.全局安装(全局安装一个gulp命令) A. ...

  4. 前端工程化系列[04]-Grunt构建工具的使用进阶

    在前端工程化系列[02]-Grunt构建工具的基本使用和前端工程化系列[03]-Grunt构建工具的运转机制这两篇文章中,我们对Grunt以及Grunt插件的使用已经有了初步的认识,并探讨了Grunt ...

  5. 前端工程化系列[03]-Grunt构建工具的运转机制

    在前端工程化系列[02]-Grunt构建工具的基本使用这篇文章中,已经对Grunt做了简单的介绍,此外,我们还知道了该如何来安装Grunt环境,以及使用一些常见的插件了,这篇文章主要介绍Grunt的核 ...

  6. gulp 前端构建工具入门

    gulp 前端构建工具入门 标签(空格分隔): gulp 1. 安装gulp npm i -g gulp 2. 创建gulp项目 2.1 Hello world 使用npm init初始化项目文件夹. ...

  7. gulp 前端构建工具使用

    gulp 前端构建工具使用 1.新建一个web  h5项目 2.准备好gulpfile.js文件 (1)下载链接:https://pan.baidu.com/s/116J-BaYOMRzeJW3i_J ...

  8. Gulp前端构建工具

    Gulp, 比Grunt更好用的前端构建工具 Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp ...

  9. 前端工程化系列[02]-Grunt构建工具的基本使用

    本文主要介绍前端开发中常用的构建工具Grunt,具体包括Grunt的基本情况.安装.使用和常见插件的安装.配置和使用等内容. 1.1 Grunt简单介绍 Grunt是一套前端自动化构建工具.对于需要反 ...

  10. gulp自动化构建工具

    gulp    自动化构建工具,实时监控.代码合并.压缩... http://www.gulpjs.com.cn/     中文网 http://gulpjs.com/plugins/     英文网 ...

随机推荐

  1. Qt Creator子目录项目-类似VS解决方案

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt Creator子目录项目-类似VS解决方案     本文地址:http://techie ...

  2. string字符串比较和替换

    我用的是小写的string!! #include <string> #include <iostream> using namespace std; int main() { ...

  3. input 元素 相对父元素错位

    <div class="recommend"> <i class="iconfont icon-user"></i> < ...

  4. 安装FastDFS+Nginx

    安装FastDFS FastDFS开发者的GitHub地址为:https://github.com/happyfish100 打开上述链接,我们点击fastdfs–>release,发现最新版的 ...

  5. Go语言【第十二篇】:Go数据结构之:切片(Slice)、范围(Range)、集合(Map)

    Go语言切片(Slice) Go语言切片是对数组的抽象,Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数 ...

  6. Devc++编译系统分配给int多少字节

    我看的是<C语言程序设计>..谭浩强的PDF版 里面只讲了VC和TC 的,没有Devc++的..(我的是5.10版) 还有这是什么意思? 经过查阅我进行了这样的测试: 得到了这样的结果: ...

  7. Oracle DB_LINK如何使用

    语句,或可通过可视化操作 -- Create database link create database link DBL_TESTconnect to UID identified by PSWus ...

  8. [辅助软件] 微信小程序开发资源汇总 接入指南

    https://github.com/justjavac/awesome-wechat-weapp https://github.com/justjavac/awesome-wechat-weapp ...

  9. CF993E Nikita and Order Statistics

    小于x的赋值为1,否则为0 区间等于k的个数 求0~n连续的n+1个k? N<=1e5? FFT! 考虑卷积建模:用下标相加实现转移到位,数值相乘类比乘法原理! 法一: 分治,然后FFT没了 法 ...

  10. 使用 Intel HAXM 为eclipse安卓模拟器加速

    一.下载haxm安装 https://software.intel.com/zh-cn/android/articles/intel-hardware-accelerated-execution-ma ...