• 简单易用
  • 高效构建
  • 高质量的生态圈

可能很多人会说现在提gulp也太落后了吧,但我想说写点东西并不是为了讨论它是否过时,而是来帮助我们自己来记忆、整理和学习。任何工具,我需要,我才去使用它,正如此时我需要gulp一样。

为了效率而使用工具

安装

  • 全局安装 gulp命令:
$ npm install --global gulp-cli
  • 作为项目的开发依赖(devDependencie)安装:
$ npm install --save-dev gulp

创建配置文件

在项目根目录下创建一个名为 gulpfile.js 的文件:

touch gulpfile.js

API

  • gulp.src(globs[, options])

    读取目标源文件

  • gulp.dest(path[, options])

    向目标路径输出结果

  • gulp.pipe()

    将目标文件通过插件处理

  • gulp.watch(glob [, opts], tasks) 或 gulp.watch(glob [, opts, cb])

    监视文件系统,并且可以在文件发生改动时候做一些事情

  • gulp.task(name[, deps], fn): 任务

    定义一个gulp任务

使用

当配置完gulp.file后运行 gulp:

$ gulp

常用工具插件

  • gulp-sass

    sass/scss编译

  • gulp-eslint

    js代码校对

  • gulp.spritesmith

    生成sprite雪碧图

  • gulp-connect

    本地起一个websocket服务,实时刷新浏览器

  • gulp-changed

    1. 不浪费宝贵的时间处理没有改动的文件.gulp-changed会首先把文件进行比对,如果文件没有改动,则跳过后续任务,。
    2. 默认情况下,gulp只能检测流中的文件是否更改。gulp-changed的对比功能更加强大,比如可以知道导入/依赖的文件是否更改。
  • http-proxy-middleware

    路由代理中间件

示例

以下是我的gulp文件,仅供交流。


'use strict';
const gulp = require("gulp"); /**
* [sass sass/scss编译]
*/
const sass = require("gulp-sass"); /**
* [eslint js代码检测]
*/
const eslint = require('gulp-eslint'); /**
* [connect 本地起一个websocket服务,实时刷新浏览器]
*/
const connect = require('gulp-connect'); /**
* [changed 比较文件变动]
* 默认情况下,gulp只能检测流中的文件是否更改。
* 如果您需要更高级的东西,比如知道导入/依赖的文件是否更改,则可以使用该插件。
*/
const changed = require('gulp-changed'); /**
* [spritesmith 合并成雪碧图]
*/
const spritesmith= ("gulp.spritesmith"); /**
* [proxy 中间代理件]
*/
const proxy = require('http-proxy-middleware'); let Pathconfig = {
sassCompilePath: __dirname + "/scss/**/*.scss", //需要编译的scss文件路径
sassDestPath: __dirname + "/css/", //编译后的scss文件存放处
htmlSrcPath: __dirname + "/html/*.html", //监控的html路径
jsSrcPath: __dirname + "/js/*.js", //监控的js文件路径
} // html任务
gulp.task("html",function(){
gulp.src(Pathconfig.htmlSrcPath)
.pipe(connect.reload());
}) // 样式任务
gulp.task("stylus",function(){
gulp.src(Pathconfig.sassCompilePath)
.pipe(changed(Pathconfig.sassDestPath))
.pipe(sass())
.pipe(gulp.dest(Pathconfig.sassDestPath))
.pipe(connect.reload());
}) // js任务
gulp.task("js",function(){
gulp.src([Pathconfig.jsSrcPath,'!node_modules/**'])
.pipe(eslint())
.pipe(eslint.formatEach('compact', process.stderr))
.pipe(connect.reload());
}) // 监控变动
gulp.task("watch",function(){
gulp.watch([Pathconfig.htmlSrcPath], ['html']);
gulp.watch([Pathconfig.sassCompilePath], ['stylus']);
gulp.watch([Pathconfig.jsSrcPath], ['js']);
}) //定义livereload任务,起一个本地服务
gulp.task('connect',function () {
connect.server({
root: __dirname,
port: 8000,
livereload: true
});
}); gulp.task("default",['connect','watch'])

使用gulp构建自动化工作流的更多相关文章

  1. gulp前端自动化工作流

    gulp前端自动化工作流 为什么要有自动化的流程? 在我们的开发过程中有大量的重复操作 DRY Don't repeat yourself 开发人员的精力应放在哪? 创造,新的一切前端开发的编译操作 ...

  2. gulp构建自动化项目

    'use strict'; var gulp = require('gulp'), browserSync = require('browser-sync').create(), SSI = requ ...

  3. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  4. Gulp构建前端自动化工作流之:常用插件介绍及使用

    在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及 ...

  5. 使用Gulp实现前端构建自动化

    使用Gulp实现前端构建自动化 安装 一.安装NodeJs Gulp的安装依赖于NodeJs的npm安装管理器 安装包下载地址 关于npm命令: 1. npm install <name> ...

  6. gulp前端自动化构建并上传oss

    前言 前端自动化构建工具从最开始的grunt, gulp, fis等到现在比较流行的webpack可谓层出不穷,个人还是比较倾向于gulp,虽然有的时候会因为某个插件的配置问题头疼很久,但不可否认gu ...

  7. 使用gulp构建微信小程序工作流

    前言 刚入门微信小程序的时候,一切都基于微信web开发者工具,没有使用其他框架,也没有工程化的概念.当时做的项目都比较简单,单单用微信web开发者工具倒也得心应手.学了些东西后,就按捺不住地想跳出原生 ...

  8. web前端工程化/构建自动化

    前端工程化 前端工程化的概念在近些年来逐渐成为主流构建大型web应用不可或缺的一部分,在此我通过以下这三方面总结一下自己的理解. 为什么需要前端工程化. 前端工程化的演化. 怎么实现前端工程化. 为什 ...

  9. 用gulp构建你的前端项目

    前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动 ...

随机推荐

  1. 使用jQuery热门功能实现

    非常多站点上都有返回顶部的效果,本文阐述怎样使用jquery实现返回顶部button. 首先须要在顶部加入例如以下html元素: <p id="back-to-top"> ...

  2. JAVA 异常 throw 与 throws

    最近一直throw和throw new …… 获取头部罢工,要彻底生气清楚这件事,他对这个思想精华收集了很多网友.这里摘录. throws全部异常信息throw则是指抛出的一个详细的异常类型.通常在一 ...

  3. Android项目---TouchListener

    public static interface View.OnTouchListener android.view.View.OnTouchListener Known Indirect Subcla ...

  4. 利用自定义的AuthenticationFilter实现Basic认证

    [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证   很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...

  5. Object Pool

    设计模式之美:Object Pool(对象池)   索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):实现 DatabaseConnectionPool 类. 意图 运用对象池化 ...

  6. Mvc的多层架构

    分享一个Mvc的多层架构,欢迎大家拍砖斧正   多层架构是什么? 多层架构是开发人员在开发过程当中面对复杂且易变的需求采取的一种以隔离控制为主的应对策略,关于多层架构的标准,我认为有一句话是比较有代表 ...

  7. IOS UI 第十一篇: UITABLEVIEW

    DIY a tableviewcell :   - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *) ...

  8. Linq无聊练习系列4--join练习

    /**************join 练习*******************/            //对于1对多关系            var list =from c in ctx.T ...

  9. MySQL中char和varchar有啥区别?优缺点是啥?

    在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...

  10. Asp.Net中使用Couchbase——Memcached缓存使用篇

    Asp.Net中使用Couchbase——Memcached缓存使用篇 前言 在上一篇Asp.Net中使用Couchbase——Memcached缓存入门篇http://www.cnblogs.com ...