第1步:安装Node

首先,最基本也最重要的是,我们需要搭建node环境。访问 nodejs.org,下载完成后直接运行程序,就一切准备就绪。npm会随着安装包一起安装,稍后会用到它。

为了确保Node已经正确安装,我们执行几个简单的命令。

  1. node -v
  2. npm -v

如果这两行命令没有得到返回,可能node就没有安装正确,进行重装。

第2步:安装gulp

首先我们要全局安装一遍:

  1. npm install -g gulp

运行时注意查看命令行有没有错误信息,安装完成后,你可以使用下面的命令查看gulp的版本号以确保gulp已经被正确安装。

  1. gulp -v

接着我们要进去到项目的根目录再安装一遍

  1. npm install gulp --save-dev

第3步:新建gulpfile.js文件

我们将要使用Gulp插件来完成我们以下任务:

  1. sass的编译(gulp-sass)
  2. 自动添加css前缀(gulp-autoprefixer)
  3. 压缩css(gulp-minify-css)
  4. js代码校验(gulp-jshint)
  5. 合并js文件(gulp-concat)
  6. 压缩js代码(gulp-uglify)
  7. 压缩图片(gulp-imagemin)
  8. 自动刷新页面(gulp-livereload)
  9. 图片缓存,只有图片替换了才压缩(gulp-cache)
  10. 更改提醒(gulp-notify)

安装这些插件需要运行如下命令:

  1. npm install gulp-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev

更多插件可以看这里gulpjs.com/plugins/

接着我们要创建一个gulpfile.js在根目录下,gulp只有四个API: taskwatchsrc,和 dest

task 这个API用来创建任务,在命令行下可以输入 gulp test 来执行test的任务。
watch 这个API用来监听任务。
src 这个API设置需要处理的文件的路径,可以是多个文件以数组的形式[main.scss, vender.scss],也可以是正则表达式/**/*.scss
dest 这个API设置生成文件的路径,一个任务可以有多个生成路径,一个可以输出未压缩的版本,另一个可以输出压缩后的版本。

3.1 加载插件:

  1. // Load plugins
  2. var gulp = require('gulp'),
  3. sass = require('gulp-sass'),
  4. autoprefixer = require('gulp-autoprefixer'),
  5. minifycss = require('gulp-minify-css'),
  6. jshint = require('gulp-jshint'),
  7. uglify = require('gulp-uglify'),
  8. imagemin = require('gulp-imagemin'),
  9. rename = require('gulp-rename'),
  10. concat = require('gulp-concat'),
  11. notify = require('gulp-notify'),
  12. cache = require('gulp-cache'),
  13. livereload = require('gulp-livereload');

3.2 建立任务:

3.2.1 编译sass、自动添加css前缀和压缩

首先我们编译sass,添加前缀,保存到我们指定的目录下面,还没结束,我们还要压缩,给文件添加 .min 后缀再输出压缩文件到指定目录,最后提醒任务完成了:

  1. // Styles任务
  2. gulp.task('styles', function() {
  3. //编译sass
  4. return gulp.src('stylesheets/main.scss')
  5. .pipe(sass())
  6. //添加前缀
  7. .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
  8. //保存未压缩文件到我们指定的目录下面
  9. .pipe(gulp.dest('stylesheets'))
  10. //给文件添加.min后缀
  11. .pipe(rename({ suffix: '.min' }))
  12. //压缩样式文件
  13. .pipe(minifycss())
  14. //输出压缩文件到指定目录
  15. .pipe(gulp.dest('assets'))
  16. //提醒任务完成
  17. .pipe(notify({ message: 'Styles task complete' }));
  18. });

3.2.2 js代码校验、合并和压缩

  1. // Scripts任务
  2. gulp.task('scripts', function() {
  3. //js代码校验
  4. return gulp.src('javascripts/*.js')
  5. .pipe(jshint())
  6. .pipe(jshint.reporter('default'))
  7. //js代码合并
  8. .pipe(concat('all.js'))
  9. //给文件添加.min后缀
  10. .pipe(rename({ suffix: '.min' }))
  11. //压缩脚本文件
  12. .pipe(uglify())
  13. //输出压缩文件到指定目录
  14. .pipe(gulp.dest('assets'))
  15. //提醒任务完成
  16. .pipe(notify({ message: 'Scripts task complete' }));
  17. });

3.2.3 图片压缩

  1. // Images
  2. gulp.task('images', function() {
  3. return gulp.src('images/*')
  4. .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
  5. .pipe(gulp.dest('images'))
  6. .pipe(notify({ message: 'Images task complete' }));
  7. });

3.2.4 事件监听

  1. // Watch
  2. gulp.task('watch', function() {
  3. // Watch .scss files
  4. gulp.watch('stylesheets/*.scss', ['styles']);
  5. // Watch .js files
  6. gulp.watch('javascripts/*.js', ['scripts']);
  7. // Watch image files
  8. gulp.watch('images/*', ['images']);
  9. // Create LiveReload server
  10. livereload.listen();
  11. // Watch any files in assets/, reload on change
  12. gulp.watch(['assets/*']).on('change', livereload.changed);
  13. });

完整代码:

  1. /*!
  2. * gulp
  3. * $ npm install gulp-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev
  4. */
  5. // Load plugins
  6. var gulp = require('gulp'),
  7. sass = require('gulp-sass'),
  8. autoprefixer = require('gulp-autoprefixer'),
  9. minifycss = require('gulp-minify-css'),
  10. jshint = require('gulp-jshint'),
  11. uglify = require('gulp-uglify'),
  12. imagemin = require('gulp-imagemin'),
  13. rename = require('gulp-rename'),
  14. concat = require('gulp-concat'),
  15. notify = require('gulp-notify'),
  16. cache = require('gulp-cache'),
  17. livereload = require('gulp-livereload');
  18. // Styles
  19. gulp.task('styles', function() {
  20. return gulp.src('stylesheets/main.scss')
  21. .pipe(sass())
  22. .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
  23. .pipe(gulp.dest('stylesheets'))
  24. .pipe(rename({ suffix: '.min' }))
  25. .pipe(minifycss())
  26. .pipe(gulp.dest('assets'))
  27. .pipe(notify({ message: 'Styles task complete' }));
  28. });
  29. // Scripts
  30. gulp.task('scripts', function() {
  31. return gulp.src('javascripts/*.js')
  32. .pipe(jshint())
  33. .pipe(jshint.reporter('default'))
  34. .pipe(concat('all.js'))
  35. .pipe(rename({ suffix: '.min' }))
  36. .pipe(uglify())
  37. .pipe(gulp.dest('assets'))
  38. .pipe(notify({ message: 'Scripts task complete' }));
  39. });
  40. // Images
  41. gulp.task('images', function() {
  42. return gulp.src('images/*')
  43. .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
  44. .pipe(gulp.dest('images'))
  45. .pipe(notify({ message: 'Images task complete' }));
  46. });
  47. // Default task
  48. gulp.task('default', function() {
  49. gulp.start('styles', 'scripts', 'images');
  50. });
  51. // Watch
  52. gulp.task('watch', function() {
  53. // Watch .scss files
  54. gulp.watch('stylesheets/*.scss', ['styles']);
  55. // Watch .js files
  56. gulp.watch('javascripts/*.js', ['scripts']);
  57. // Watch image files
  58. gulp.watch('images/*', ['images']);
  59. // Create LiveReload server
  60. livereload.listen();
  61. // Watch any files in assets/, reload on change
  62. gulp.watch(['assets/*']).on('change', livereload.changed);
  63. });

第4步:运行

可以运行单独的任务,例如

  1. gulp default
  2. gulp watch

也可以运行整个任务

  1. gulp

总结

  1. 安装Node
  2. 安装gulp
  3. 新建gulpfile.js文件
  4. 运行

最后是我自己设置的项目文件路径

  1. |--/assets/--------压缩后样式和脚本存放的目录
  2. |--/images/--------图片存放目录
  3. |--/javascripts/---脚本存放目录
  4. |--/stylesheets/---样式存放目录
  5. |--/plugin/--------插件存放目录
  6. |--gulpfile.js

原文地址:https://segmentfault.com/a/1190000002698606

gulp入门教程的更多相关文章

  1. Gulp入门教程(转载)

    本人转载自: Gulp入门教程

  2. (转)前端构建工具gulp入门教程

    前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...

  3. gulp ( http://markpop.github.io/2014/09/17/Gulp入门教程 )

    前言 最近流行前端构建工具,苦于之前使用Grunt,代码很难阅读,现在出了Gulp,真是摆脱了痛苦.发现了一篇很好的Gulp英文教程,整理翻译给大家看看. 为什么使用Gulp Gulp基于Node.j ...

  4. gulp入门教程(详细注解)

    本文转载自http://www.ydcss.com/archives/18 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很 ...

  5. gulp入门教程(转)

    一.gulp简介     1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自 ...

  6. 前端构建工具gulp入门教程(share)

    参考自:http://segmentfault.com/a/1190000000372547 资源: npm上得gulp组件 gulp的Github主页 官方package.json文档 gulp中文 ...

  7. 前端构建工具gulp入门教程

    本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...

  8. gulp环境搭建,gulp入门教程

    gulp常用地址: gulp官方网址:http://gulpjs.com gulp插件地址:http://gulpjs.com/plugins gulp 官方API:https://github.co ...

  9. gulp详细入门教程

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

随机推荐

  1. Hdu 4681 2013 Multi-University Training Contest 8 String

    带跨越式的LCS,同样是在朴素的LCS上加入一种跨越一段的转移,这样我们要预处理出跨越一段给定串的转移函数. 这个题同样可以正反两边LCS做 呆马: #include <iostream> ...

  2. java图书管理的一个小模块(增删改查,不使用数据库)

    图书管理模块:某图书管需要对图书进行信息化管理,要求管理员能够进行新增图书,能按照书名进行模糊查看图书能进行价格统计 系统实现如下:1.新增2.查询3.统计价格 1请输入新书:图书号,书名,作者,价格 ...

  3. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  4. drdb

    Distributed Replicated Block Device(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像.DRBD工作在内 ...

  5. 最近几天玩freebsd奋斗成果总结

    玩freebsd发现真的很累人..相信如下问题第一次玩freebsd都遇到过: 安装系统默认只有文本模式,需要手工安装gnome,kde等desktop environment. Freebsd安装. ...

  6. sqllite 默认当前日期写法

    create table IF NOT EXISTS realpoint(_id integer primary key autoincrement,rountId varchar(50),lng d ...

  7. centos搭建属于自己wordpress网站

    1.在centos7中安装好mysql5.7.16.httpd.php.php-mysql工具 这里的mysql可以用yum一键安装,他可以自己解决依赖问题 [root@localhost ~]# y ...

  8. jdbc连接mysql

    package june25jdbcTest; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Res ...

  9. 大数据 > 数据平台方案评估

    分类 当前措施 说明 百度竞价如何进行数据分析(SEM工程师)数据来源: 1. 百度后台推广数据:api 总展现 总点击 点击率 总消费 点击均价 BDP功能点 1. 串联百度->网站商务通-& ...

  10. OOP过度抽象

    OI的时候,解决问题是第一位的,别老想着可维护性.能过就行啦,又不是工程. 下面是两篇相关的文章 来自酷壳 编程真难啊 2009年9月3日 陈皓 上周,在Sun的Java论坛上出现了一个这样的帖子,L ...