1, gulp 依赖node, 使用gulp 之前,要先安装node.  Node 安装完成后,它自带npm.

Npm: node package manager 就是node 包管理器. 用过java 的就知道,java 有许多包,我们使用一个包的时候,要先引入 import 这个包。Node 也是一样,当我们使用一个包时,就需要先安装它, npm install  包名。

2,  Node 安装完成, 按window +r 组合键,调用运行窗口,输入cmd, 打开windows 自带的命令窗口。输入npm install  –g  gulp, 就可全局安装gulp(g就是global 全局的意思)。

    所谓全局安装,就是指我们可以在命令行中使用glup 命令。Gulp 安装完成后,你直接在命令行中输入gulp  -v , 它就输出了 gulp 的版本号。这也证明,我们可以在命令行中,直接使用gulp 命令。 这和java 的配置环境变量一样,如果要想在命令行中使用java 命令,就必须手动配置环境变量,npm install –g 安装之后,我们就省略掉这一步,直接使用。

3, 这时,我们就可以开始我们的项目了。比如,进入到e: 盘,新建一个空文件夹,命名为gulp。打开该文件夹,首先要做的是创建 一个package.json文件。这个文件主要是对整个 项目进行描述,项目名字,版本号,最主要是 对开发这个项目的依赖进行管理。怎样才能快速建立这个文件? 进入到该文件夹下,按住shift键,右击鼠标, 单击“在此处打开命令窗口”,打开命令窗口,输入 npm init , 按要求进行添写,注意,命名(name) 不能用大写。

4, gulp 工作主要是通过插件完成,这里我们就用一下gulp-less 插件。准备工作:在gulp 文件夹下,新建index.html, less文件夹, less 文件夹下再建style.less文件。

在该文件夹下,打开命令行:npm install gulp gulp-less –save-dev, 本地安装gulp 和gulp-less 插件。所谓本地安装,其实就是只能在该项目文件夹下使用, 安装完成后,在文件中,你能看到多了一个node_modules 文件夹,它里面就包括我们安装的gulp 和gulp-less。 --save-dev, 保存到开发依赖中,dev 就是development, 指的就是开发环境。这时,打开package.json文件,你们会看到多了,devDependencies 字段,下面是gulp和gulp-less 及版本号。

5, 还差一步,那就是gulp的配置文件,gulpfile.js 文件。我们什么工具都有了,那要告诉gulp干什么事情, 这就是gulpfile.js文件做的事情,定义任务。在gulp文件夹下(项目根目下),新建gulpfile.js文件。先写一个简单的任务,把less转化成css。

var gulp = require("gulp");
var less = require("gulp-less");

gulp.task("less", function(){
     gulp.src("less/style.less")
    .pipe(less())
    .pipe(gulp.dest("build")) 

})

6,在gulp根目录文件夹下,打开命令行,输入gulp less, 结束后,你可以看到,文件夹下多了一个build文件夹,并且里面有style.css 文件,打开index.html, 引入style.css, 可以看到样式起作用了。这证明,gulp任务完成。

首先,我们看到声明了两个变量。上面说到,本地安装的时候,只能在该项目下面使用,就是说的下面这两句。 因为,node 遵循的是CommonJS 规范, 通过require加载模块文件,进行使用。

var gulp = require(“glup”);

var less = require(“gulp-less”)

后面就是gulp 的api, gulp.task, gulp.src, gulp.dest, 和 pipe。 pipe是管道的意思,这也是gulp所说的它是其于流的构建工具。前一个的输出,变成后一个输入。

  gulp.task(): 为gulp 定义一个任务,首先必须有任务名,这样我们才能告诉gulp 执行哪个任务,比如,在命令行中,输入glup less 就是执行我们定义的less命令。其次这个任务做什么事情,其实还有最一个可选,就是我们这个任务要不要等其他任务完成才执行,如果是,那就需要把这个依赖写到任务中,所以它接受两个必须参数,和一个可选参数。

gulp.task(name, dependes, func):

  name: 就是任务名,它是一个字符串,注意命名中不能有空格,要不然,命令行中无法执行。dependes(可选): 定义完成这个任务之前,必须先执行完成哪些任务,因此,它是一个数组列表,依次列出要先完成的任务如:[“a”, “b”]。func: 函数: 定义这个任务要做的事性。

如果,我们想把css 再压缩,那就需要先把less 转化css,  再进行压缩, less转为化css 就必须先执行,这就是依赖dependes.  要压缩css, 需要引入gulp-minify-css 插件,同时 引入gulp-rename 插件可以对压缩后的文件进行重命名, 写一个压缩任务minifycss, 对三个参数进行说明。

gulp.task("minifycss", ["less"], function(){
    gulp.src("build/style.css")
    .pipe(minifycss())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest("build"))
})

  这时,命令行中执行gulp minifycss 命令并没有使我们的网页发生变化,原来这个命令只是执行了less 任务, less转为化css 。一个命令只能执行一个任务,但它保证了任务的按顺序执行, 再执行gulp minifycss 命令, 网页发生了变化。 但是后来发现,这是我的一个错误认识。上文说到,gulp 是基于流的操作。gulp 执行minifycss 任务时依赖less, 因此 less 执行完后,必须要返回一个流,这个流再流入minifycss,这样就可以连续执行了。但我们的less任务没有返回值,所以执行完less任务后就中断了。less任务修改一下,加return, 这样执行一个gulp minifycss 命令就可以了。

gulp.task("less", function(){
     return gulp.src("less/style.less")
    .pipe(less())
    .pipe(gulp.dest("build")) 

})

为了减少在命令行中的输入,可以定义默认任务,定义之后,直接在命令行中输入gulp,就可以执行任务。定义方式:gulp.task("default", ["minifycss"]). gulpfile.js文件如下,命令行中输入gulp 可以才测试。

var gulp = require("gulp");
var less = require("gulp-less");
var minifycss = require("gulp-minify-css");
var rename = require('gulp-rename');
// less --> css
gulp.task("less", function(){
    return gulp.src("less/style.scss")
    .pipe(less())
    .pipe(gulp.dest("build"))
})

// 压缩css
gulp.task("minifycss", ["less"], function(){
    gulp.src("build/style.css")
    .pipe(minifycss())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest("build"))
})
// 定义默认任务
gulp.task("default", ["minifycss"]);

gulp.src():指定任务要处理的文件,因此,它接受一个必须的参数:文件的路径, 它还有一个可选的options, 对它进行配置,这时没有具体研究。gulp.src(“文件路径”[, options])

  文件路径可以是具体的路径,可以是通配符路径:具体如下:

    “src/a.js”:指定具体文件;

    “*”:匹配所有文件    例:src/*.js(包含src下的所有js文件);

    “**”:匹配0个或多个子文件夹    例:src/**/*.js(包含src的0个或多个子文件夹下的js文件);

    “{}”:匹配多个属性    例:src/{a,b}.js(包含a.js和b.js文件)  src/*.{jpg,png,gif}(src下的所有jpg/png/gif文件);

    “!”:排除文件    例:!src/a.js(不包含src下的a.js文件);

gulp.dest(): 指定任务完成后生成的文件放到什么地方,因此它接受一个必须的参数:文件的路径, 和 gulp.src 一样,它还有一个可选的options, 对它进行配置,gulp.dest(“文件路径”[, options])。

gulp 还有一个api,我们没有用到,这就是gulp.watch(), 它对文件变动进行监听,如果文件变动之后,它要做哪些事情。因此,它接受两个必须的参数,要监听的文件,执行的任务列表。 如gulp.watch('less/*.less', ['less','minifycss']);  如果.less文件发生变化,gulp 自动执行less 和minifycss 任务。 定义一个watch任务并执行,修改一下.less 文件,可以看到style.css 和min.css 文件同时变化了,刷新浏览器,也变化了。

gulp.task("watch", function(){
    gulp.watch("less/*.less", ["less", "minifycss"])
})

gulp.watch还能返回一个对象发射change 事件,它接受一个回调函数,change 完成后,执行的事情, 修改上面的代码如下, 执行gulp命令可以看到控制台输出1

gulp.task("watch", function(){
    var watch = gulp.watch("less/*.less", ["less", "minifycss"]);
    watch.on('change', function(){
        console.log(1);
    })
})

gulp 最基本的就这些了,整个配置文件如下:

var gulp = require("gulp");
var less = require("gulp-less");
var minifycss = require("gulp-minify-css");
var rename = require('gulp-rename');
// less --> css
gulp.task("less", function(){
    return gulp.src("less/style.less")
    .pipe(less())
    .pipe(gulp.dest("build"))
})

// 压缩css
gulp.task("minifycss", ["less"], function(){
    gulp.src("build/style.css")
    .pipe(minifycss())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest("build"))
})

// 监听任务
gulp.task("watch", function(){
    var watch = gulp.watch("less/*.less", ["less", "minifycss"]);
    watch.on('change', function(){
        console.log(1);
    })
})
gulp.task("default", ["watch"]);

gulp 基本使用的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  3. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  4. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  5. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  6. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  7. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  8. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  9. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  10. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

随机推荐

  1. there are no packages available for installation插件安装问题和如何配置浏览器的快捷键

    sublime text3 在安装插件时,有时候会莫名其妙的弹出如下所示的弹窗(之前遇到了,但写的时候不知道为什么我的又可以了,这个只是出现了这个问题之后可以尝试的一个解决办法,图片就从网上找了一个) ...

  2. 飞机大战编写以及Java的面向对象总结

    面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Ai ...

  3. CentOS下搭建LAMP环境详解

    前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...

  4. [nodejs] Error: unable to verify the first certificate

    Error: unable to verify the first certificate Solution npm config set registry http://registry.npmjs ...

  5. Caffe框架下的图像回归测试

    Caffe框架下的图像回归测试 参考资料: 1. http://stackoverflow.com/questions/33766689/caffe-hdf5-pre-processing 2. ht ...

  6. 浅谈 Scrapy 爬虫(二)

    越写越像官方文档的翻译,偏离了初衷.写一些官方文档里没有的内容吧.   在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面.也就是说 Scr ...

  7. tomcat输出servlet-api.jar - jar not loaded 解决办法

    tomcat输出servlet-api.jar - jar not loaded 解决办法 启动tomcat后,控制台输出信息:WEB-INF/lib/servlet-api.jar not load ...

  8. Linux 文件操作监控inotify功能及实现原理【转】

    转自:http://blog.chinaunix.net/uid-26585427-id-5012973.html 1. inotify主要功能 它是一个内核用于通知用户空间程序文件系统变化的机制. ...

  9. 富文本编辑器TInyMCE,本地图片上传(Image Upload)

    TinyMCE 官网 (类似:百度的富文本web编辑器UEditor) 第一步 下载 TinyMCE,解压后放入工程,在需要的HTML页面引入tinymce.min.js. 第二步 下载tinyMCE ...

  10. mongoose 的 model,query:增删改查

    简介 mongoose是node.js的一个操作mongodb的模块,比起之前mongodb模块,只需要在开始时连接,不需要手动关闭,十分方便. 连接mongodb 首先你需要安装mongodb.有了 ...