'use strict';
var gulp = require('gulp'),
browserSync = require('browser-sync').create(),
SSI = require('browsersync-ssi'),//多浏览器多设备同步&自动刷新
concat = require('gulp-concat'),//整合文件
uglify = require('gulp-uglify'), //混淆js 暂时没用到
minify = require('gulp-minify'), //压缩js
plumber = require('gulp-plumber'),//错误处理插件plumber
compass = require('gulp-compass'), //compass 用来编译sass
imagemin = require('gulp-imagemin'),//压缩图片
clean = require('gulp-clean'), //clean 用来删除文件
zip = require('gulp-zip'),//压缩文件
runSequence = require('gulp-run-sequence');//控制task中的串行和并行。这个很重要,它能够严格规定task的执行顺序,否则gulp默认并行,有些时候会产生问题。如先清空再重建文件,可能重建过程中又清空了。 //创建一个名为serve的任务,该任务的内容就是匿名函数中的内容。
gulp.task('serve', function () {
//使用browserSync创建服务器,自动打开浏览器并打开./dist文件夹中的文件(默认为index.html)
browserSync.init({
server: {
baseDir: ["./dist"],
middleware: SSI({
baseDir: './dist',
ext: '.shtml',
version: '2.10.0'
})
}
});
//监听各个目录的文件,如果有变动则执行相应的任务操作文件
gulp.watch("app/sass/*.scss", ['compass']);
gulp.watch("app/script/*.js", ['js']);
gulp.watch("app/**/*.html", ['html']);
gulp.watch("app/img/**/*.*", ['img'])
gulp.watch("app/font/*", ['font'])
//如果有任何文件变动,自动刷新浏览器
gulp.watch("dist/**/*.html").on("change", browserSync.reload);
}); //compass任务,将scss编译为css
gulp.task('compass', function () {
//首先取得app/sass下的所有后缀为.scss的文件(**/的意思是包含所有子文件夹)
return gulp.src('app/sass/*.scss')
.pipe(compass({
//设置生成sourcemap,在调试器中显示样式在scss文件中的位置,便于调试
sourcemap: 'true',
//输出格式设置为compressed就不需要压缩css了
style: 'compressed',
//文件目录
css: 'dist/css',
sass: 'app/sass',
image: 'app/images'
}))
//如果有错误输出错误提示
.on('error', function (error) {
// Would like to catch the error here
console.log(error);
this.emit('end');
})
//编译后的文件放入dist/stylesheets下
.pipe(gulp.dest('dist/css'))
//自动刷新浏览器
.pipe(browserSync.stream());
}); //js任务,将js压缩后放入dist。该任务要在clean-scripts任务完成后再执行
gulp.task('js', function () {
//首先取得app/javascript下的所有后缀为.js的文件(**/的意思是包含所有子文件夹)
return gulp.src('app/script/*.js')
//错误管理模块
.pipe(plumber())
//目前没用混淆,不方便调试
//.pipe(uglify())
//js压缩
.pipe(minify())
//输出到dist/javascript
.pipe(gulp.dest("dist/js"))
//自动刷新浏览器
.pipe(browserSync.stream());
}); //html任务,目前什么都没做。只是单纯的把所有html从开发环境app复制到测试环境dist
gulp.task('html', function () {
return gulp.src("app/*.html")
.pipe(plumber())
.pipe(gulp.dest("dist/"))
.pipe(browserSync.stream());
}); // 处理图片
gulp.task('img', function(){
return gulp.src('app/img/**/*.*')
.pipe(imagemin())
.pipe(gulp.dest('dist/img'))
.pipe(browserSync.stream());
}); //publish任务,需要的时候手动执行,将dist中的文件打包压缩放到release中。
gulp.task('publish', function () {
//取得dist文件夹中的所有文件
return gulp.src('dist/**/*')
//错误处理模块
.pipe(plumber())
//压缩成名为publish.zip的文件
.pipe(zip('publish.zip'))
//放入release文件夹
.pipe(gulp.dest('release'))
}); //js任务,将js压缩后放入dist。该任务要在clean-scripts任务完成后再执行
gulp.task('font', function () {
//首先取得app/javascript下的所有后缀为.js的文件(**/的意思是包含所有子文件夹)
return gulp.src('app/font/*')
//错误管理模块
.pipe(plumber())
//输出到dist/javascript
.pipe(gulp.dest("dist/font"))
//自动刷新浏览器
.pipe(browserSync.stream());
}); //clean任务:清空dist文件夹,下边重建dist的时候使用
gulp.task('clean', function () {
return gulp.src('dist/*', {read: false})
.pipe(clean());
}); //redist任务:需要时手动执行,重建dist文件夹:首先清空,然后重新处理所有文件
gulp.task('redist', function () {
//先运行clean,然后并行运行html,js,compass
runSequence('clean', ['html', 'js', 'img','compass','font']);
}); //建立一个名为default的默认任务。当你在gitbash中执行gulp命令的时候,就会
gulp.task('default', function () {
//先运行redist,启动服务器
runSequence('redist', 'serve');
});

构建初始化项目

npm init

全局安装依赖gulp

npm install gulp -g

安装依赖

npm install browser-sync  browsersync-ssi gulp gulp-clean gulp-compass gulp-concat gulp-imagemin gulp-minify gulp-minify-css gulp-plumber gulp-run-sequence gulp-sass gulp-uglify gulp-zip plumber --save

按照上图给的目录:构建

dist的文件中的所有都是通过gulp生成,无需操作,只需操作app文件中的就可以。

gulp构建自动化项目的更多相关文章

  1. 使用 gulp 构建一个项目

    本章将介绍 gulp-watch-path stream-combiner2 gulp-sourcemaps gulp-autoprefixer 您还可以直接学习以下模块: 安装 Node 和 gul ...

  2. 2016-7-15(1)使用gulp构建一个项目

    gulp是前端开发过程中自动构建项目的工具,相同作用的还有grunt.构建工具依 靠插件能够自动监测文件变化以及完成js/sass/less/html/image/css/coffee等文件的语法检查 ...

  3. 使用gulp构建自动化工作流

    简单易用 高效构建 高质量的生态圈 可能很多人会说现在提gulp也太落后了吧,但我想说写点东西并不是为了讨论它是否过时,而是来帮助我们自己来记忆.整理和学习.任何工具,我需要,我才去使用它,正如此时我 ...

  4. 使用gulp构建一个项目

    gulp是前端开发过程中自动构建项目的工具,相同作用的还有grunt.构建工具依靠插件能够自动监测文件变化以及完成js/sass/less/html/image/css/coffee等文件的语法检查. ...

  5. jekins构建自动化项目的步骤

    填入项目名字 源码管理从git自动拉取代码到工作目录 jenkins拉取代码会到工作空间linux下安装完目录是/var/lib/jenkins/workspace/jeekins-test(可以根据 ...

  6. 续Gulp使用入门-综合运用>使用Gulp构建一个项目

    这是我的文件目录结构图  下面是我gulpfile.js的配置 'use strict' var gulp=require('gulp'); var gutil=require('gulp-util' ...

  7. Selenium Web 自动化 - 项目实战环境准备

    Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG  1.1 安装TestNG  1.2 添加TestNG类库2 部署Maven  2.1 mav ...

  8. Gulp.js - 简单、直观的自动化项目构建工具

    Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...

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

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

随机推荐

  1. 刷题之路第三题--Longest Substring Without Repeating Characters

    问题简介:求给定字符串中最长的字符不重复的字符串的长度 问题详解: 给定一个字符串,寻找给定字符串中包含的最长的字符不重复的字符串的长度 注:答案必须是子字符串,不是子序列 是连续的字符不重复的字符串 ...

  2. costmap_2d 解析

    costmap_2d这个包提供了一种2D代价地图的实现方案,该方案利用输入的传感器数据,构建数据2D或者3D代价地图(取决于是否使用基于voxel的实现),并根据占用网格和用户定义的膨胀半径计算2D代 ...

  3. Springboot Session集群处理

    在集群环境下,常见的基于Session的身份认证就会有一个问题,因为Session是跟着服务器走的,当用户在服务器1登陆成功后,当用户在访问服务器2的时候会因为服务器2没有用户的身份信息而再次跳转到认 ...

  4. Deep Learning Tutorial - Classifying MNIST digits using Logistic Regression

    Deep Learning Tutorial 由 Montreal大学的LISA实验室所作,基于Theano的深度学习材料.Theano是一个python库,使得写深度模型更容易些,也可以在GPU上训 ...

  5. python3+selenium框架设计05-配置文件和浏览器引擎类

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  6. 正则表达式处理BT的html嵌套问题

    在博问里面求教大神,把问题搞定.在此做个记录备份,也给碰到类似问题的园友提供解决思路. 简化的业务场景就是,在页面html标签中的属性中嵌套了html标签,怎么用用正则表达式过滤闭合的html标签(& ...

  7. 设计模式C++学习笔记之十一(Bridge桥梁模式)

      桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化.实现分离的办法就是增加一个类, 11.1.解释 main(),客户 IProduct,产品接口 CHouse,房子 CIPod,ip ...

  8. $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互

    一.ajax  1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json  2 ajax干啥用的?前后端做数据交互:  3 之前学的跟后台做交互的方式:   -第一种:在浏览器 ...

  9. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境

    在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...

  10. Select2日常操作集合

    1.获得多选值 var arraySelected = $('#carTypes').select2("data"); var carTypesDesc = ''; for (va ...