gulp 使用指南
2018-01-06 18:46
513 查看
# 简介
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。通过本文,我们将学习如何使用Gulp来改变开发流程,从而使开发更加快速高效。
gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。
本示例以gulp-less为例(将less编译成css的gulp插件)展示gulp的常规用法,只要我们学会使用一个gulp插件后,其他插件就差看看其帮助文档了。让我们一起来学习gulp吧!
gulp常用地址:
gulp官方网址:http://gulpjs.com
gulp插件地址:http://gulpjs.com/plugins
gulp 官方API:https://github.com/gulpjs/gulp/blob/master/docs/API.md
gulp 中文API:http://www.ydcss.com/archives/424
# 安装
在学习前,先谈谈大致使用gulp的步骤,给读者以初步的认识。首先当然是安装nodejs,通过nodejs的npm全局安装和项目安装gulp,其次在项目里安装所需要的gulp插件,然后新建gulp的配置文件gulpfile.js并写好配置信息(定义gulp任务),最后通过命令提示符运行gulp任务即可。
安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务
1. 安装 node
安装 nodejs 可前往 node官网下载,安装方法和其他软件安装一样,nodejs自带npm。2. 全局安装 gulp
说明:全局安装gulp目的是为了通过她执行gulp任务;安装:执行
$ npm install -g gulp
查看是否正确安装:命令提示符执行
$ gulp -v,出现版本号即为正确安装。
3. 本地安装 gulp
说明:全局安装gulp后,还需要在每个要使用gulp的项目中都单独安装一次。把目录切换到你的项目文件夹中,然后在命令行中执行:$ npm install gulp
安装完成之后,会在你的项目根路径下生产 node_modules 文件,在该文件下方就是你的 gulp文件夹。
如果想在安装的时候把gulp写进项目package.json文件的依赖中,则可以加上
--save-dev。不过你需要先创建package.json文件(可调转至开始使用第1项)
提示:细心的你可能会发现,我们全局安装了gulp,项目也安装了gulp,全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能。这样就完成了gulp的安装。至于为什么在全局安装gulp后,还需要在项目中本地安装一次,有兴趣的可以看下stackoverflow上有人做出的回答:why-do-we-need-to-install-gulp-globally-and-locally、what-is-the-point-of-double-install-in-gulp。大体就是为了版本的灵活性,但如果没理解那也不必太去纠结这个问题,只需要知道通常我们是要这样做就行了。
# 开始使用
1. 新建 package.json 文件
说明:package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件;指令:
$ npm init或者
$ npm init --yes
查看package.json帮助文档,命令提示符执行:
$ npm help package.json
2. 新建gulpfile.js文件(重要)
说明:gulpfile.js是gulp项目的配置文件,是位于项目根目录的普通js文件。就像gruntjs需要一个Gruntfile.js文件一样,gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做
gulpfile.js。新建一个文件名为
gulpfile.js的文件,然后放到你的项目目录中。之后要做的事情就是在
gulpfile.js文件中定义我们的任务了。
执行以下指令新建gulpfile.js文件:
$ touch gulpfile.js
下面是一个最简单的
gulpfile.js文件内容示例,它定义了一个默认的任务
你可以直接打开该文件将下面的代码复制到 gulpfile.js 文件中
var gulp = require('gulp'); gulp.task('default',function(){ console.log('Hello world'); });
3. 运行gulp
说明:命令提示符执行$ gulp task-name;
当执行
$ gulp default或
$ gulp将会调用default任务里的所有任务。
此时终端会输入如下内容:
[17:55:38] Using gulpfile ~/Desktop/Gulp-demo/gulpfile.js [17:55:38] Starting 'default'... hello world [17:55:38] Finished 'default' after 202 μs
到这里,你已经学会了gulp安装与基本使用,后面讲以一个示例的形式教你如何使用gulp插件。
# gulp 插件使用
1. gulp-less
使用gulp-less插件将less文件编译成css,当有less文件发生改变自动编译less,并保证less语法错误或出现异常时能正常工作并提示错误信息。本示例的目录结构如下:
|--proj | |--node_modules | |--src | |--css | |--less | |--index.html | |--gulpfile.js | |--package.json
本地安装 gulp-less
$ npm install gulp-less --save-dev
配置gulpfile.js
a)、基本使用
// 导入工具包 require('node_modules里对应模块') var gulp = require('gulp'), less = require('gulp-less'); // 定义一个less任务(自定义任务名称) gulp.task('less', function () { // 该任务针对的文件 gulp.src('src/less/index.less') // 该任务调用的模块 .pipe(less()) // 将会在src/css下生成index.css .pipe(gulp.dest('src/css')); }); //gulp.task(name[, deps], fn) 定义任务 name:任务名称 deps:依赖任务名称 fn:回调函数 //gulp.src(globs[, options]) 执行任务处理的文件 globs:处理的文件路径(字符串或者字符串数组) //gulp.dest(path[, options]) 处理完后文件生成路径
b)、编译多个less文件
var gulp = require('gulp'), less = require('gulp-less'); gulp.task('less', function () { gulp.src(['src/less/index.less','src/less/detail.less']) //多个文件以数组形式传入 .pipe(less()) .pipe(gulp.dest('src/css')); // 将会在src/css下生成index.css以及detail.css });
c)、匹配符
!,
*,
**,
{}
var gulp = require('gulp'), less = require('gulp-less'); gulp.task('less', function () { // 编译src目录下的所有less文件 // 除了reset.less和test.less(**匹配src/less的0个或多个子文件夹) gulp.src(['src/less/*.less', '!src/less/**/{reset,test}.less']) .pipe(less()) .pipe(gulp.dest('src/css')); });
d)、调用多模块(编译less后压缩css)
var gulp = require('gulp'), less = require('gulp-less'), // 确保本地已安装 gulp-minify-css // $ cnpm install gulp-minify-css --save-dev cssmin = require('gulp-minify-css'); gulp.task('less', function () { gulp.src('src/less/*.less') .pipe(less()) // 兼容IE7及以下需设置compatibility属性 .pipe(cssmin({compatibility: 'ie7'})) .pipe(cssmin()) .pipe(gulp.dest('src/css')); });
执行任务
$ gulp less
监听事件(自动编译less)
若每修改一次less,就要手动执行任务,显然是不合理的,所以当有less文件发生改变时使其自动编译
var gulp = require('gulp'), less = require('gulp-less'); gulp.task('less', function () { gulp.src(['src/less/*.less']) .pipe(less()) .pipe(gulp.dest('src/css')); }); gulp.task('watch', function () { gulp.watch('src/**/*.less', ['less']); //当所有less文件发生改变时,调用less任务 });
启动监听事件:命令提示符执行
$ gulp watch
注意:该命令提示符执行需处于打开状态,关闭后监听事件结束(Ctrl + C 或右上)
异常处理
当编译less时出现语法错误或者其他异常,会终止watch事件,通常需要查看命令提示符窗口才能知道,这并不是我们所希望的,所以我们需要处理出现异常并不终止watch事件(gulp-plumber),并提示我们出现了错误(gulp-notify)。
var gulp = require('gulp'), less = require('gulp-less'), //当发生异常时提示错误 确保本地安装gulp-notify和gulp-plumber notify = require('gulp-notify'), plumber = require('gulp-plumber'); gulp.task('less', function () { gulp.src(['src/less/*.less']) .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')})) .pipe(less()) .pipe(gulp.dest('src/css')); }); gulp.task('watch', function () { gulp.watch('src/**/*.less', ['less']); //当所有less文件发生改变时,调用less任务 });
2. 使用webstorm运行gulp任务
说明:使用webstorm可视化运行gulp任务;使用方法:将项目导入webstorm,右键gulpfile.js 选择”Show Gulp Tasks”打开Gulp窗口,若出现”No task found”,选择右键”Reload tasks”,双击运行即可。
# 基于gulp前端静态站点结构
参考这篇文章相关文章推荐
- Gulp使用指南
- 《Gulp 入门指南》 : 使用 gulp 压缩 JS
- Gulp使用指南
- 《Gulp 入门指南》 : 使用 gulp 压缩 JS
- Gulp使用指南
- 前端自动化构建工具gulp使用指南
- 转:Gulp使用指南
- Gulp 使用指南
- gulp使用指南
- gulp基本使用指南
- Gulp使用指南
- gulp的使用指南
- JPA使用指南 javax.persistence的注解配置
- 你真的会用Gson吗?Gson使用指南(一)
- 使用Ant批量打包Android应用完全指南
- 转:ABCpdf.NET 的简易使用指南
- .htaccess使用指南
- JPA使用指南 javax.persistence的注解配置
- (转)log4net 1.2.9使用指南
- Log4j使用指南