gulp例子:https://github.com/Aquarius1993/gulpDemo
淘宝镜像:$ npm install -g cnpm --registry=https://registry.npm.taobao.org
 
一 入门:
         npm: node package manager(前提是安装了node)
          1.1 全局安装   npm install --global gulp
          1.2 作为项目依赖安装  npm install --save--dev gulp
          1.3 在项目根目录下创建一个名为  gulpfiel.js  的文件   
                   var gulp = require('gulp');
gulp.task('defalut',function () {
     // body... 
});  
mac用户需要管理员的身份才能全局安装,所以:sudo npm install gulp -g
   
二 选择gulp组件
通过gulp plugins,寻找对于的gulp组件
gulp-imagemin: 压缩图片
gulp-ruby-sass: 支持sass
gulp-less:编译less
gulp-minify-css: 压缩css   在minicss()中加

"compatibility": "ie7"
gulp-cssnano:压缩css
gulp-jshint: 检查js     
gulp-uglify: 压缩js
gulp-concat: 合并文件
gulp-rename: 重命名文件
gulp-htmlmin: 压缩html
gulp-clean: 清空文件夹
gulp-livereload: 服务器控制客户端同步刷新(需配合chrome插件LiveReloadtiny-lr
gulp-cssnano:压缩css
Browser Sync 帮助我们搭建简单的本地服务器并能实时刷新浏览器 它还能 同时刷新多个设备
gulp-useref会将多个文件拼接成单一文件,并输出到相应目录。
安装组件: npm install gulp-util gulp-imagemin gulp-ruby-sass gulp-minify-css gulp-jshint gulp-uglify gulp-rename gulp-concat gulp-clean gulp-livereload tiny-lr --save-dev
三 项目目录结构
project(项目名称)
|–.git 通过git管理项目会生成这个文件夹
|–node_modules 组件目录
|–dist 发布环境
    |–css 样式文件(style.css style.min.css)
    |–images 图片文件(压缩图片)
    |–js js文件(main.js main.min.js)
    |–index.html 静态文件(压缩html)
|–src 生产环境
    |–sass sass文件
    |–images 图片文件
    |–js js文件
    |–index.html 静态文件
|–.jshintrc jshint配置文件
|–gulpfile.js gulp任务文件
 
四 基础语法
gulp通过gulpfile.js文件来完成相关任务,所以项目中必须包含gulpfile.js
gulp有5个方法:src  dest task run watch
src dest:指定源文件和处理后文件的路径
watch 用来监听文件的变化
task 指定任务
run 执行任务
五 创建Gulp项目
     在项目文件夹下执行  npm init 
     作用是:会在项目本地建立一个package.json文件,用来保存项目的各种依赖,终端的提示都可默认。

创建完之后,我们执行下面的命令:npm install gulp --save-dev(在package中添加gulp依赖)

 
六 编写gulp任务
/*
* @Author: liheyao
* @Date: 2016-10-25 10:56:42
* @Last Modified by: liheyao
* @Last Modified time: 2016-10-25 16:15:32
*/
//引入gulp和组件
var gulp = require('gulp'),//gulp基础库
gulpLoadPlugins = require('gulp-load-plugins'),//引入依赖插件
del = require('del'),// 文件夹删除清空
// 实时刷新
tinylr = require('tiny-lr'),
browerSync = require('browser-sync'),
server = tinylr(),
port = 3080;
// load all gulp plugins
var plugins = gulpLoadPlugins(), //package.json中的gulp依赖项
env = process.env.NODE_ENV || 'development',//开发环境 dev 还是pro
isProduction = env == 'production',
ipJS = isProduction ? "src/js/dev.js":"src/js/pro.js";//根据不同的开放环境引入不同的js
/** css,js缓存配置 **/
var time = new Date();
var timeStamp = dateToString(time);
var timeStamp_prod = time.valueOf();
function dateToString(time) {
var year = time.getYear() + 1900;
var month = time.getMonth() + 1; //月
var day = time.getDate(); //日
var hh = time.getHours(); //时
var mm = time.getMinutes(); //分
var str= year + "-";
if(month < 10){
str += "0";
}
str += month + "-";
if(day < 10)
str += "0";
str += day + " ";
str += hh + ':';
str += mm;
return(str);
}
//html处理
gulp.task('html',function(){
gulp.src('src/*.html')
// 判断 如果是pro 压缩html
.pipe(plugins.if(isProduction, plugins.htmlmin({
collapseWhitespace: true,//空白
removeComments: true//注释
})))
// 判断 如果是pro 加时间戳
.pipe(plugins.if(isProduction, plugins.replace(/_VERSION_/gi, '.min_'+timeStamp_prod), plugins.replace(/_VERSION_/gi, '.min')))
.pipe(gulp.dest('dist/'))
// 实时监听
.pipe(browerSync.reload({
stream: true
}));
});
//sass
gulp.task('sass',function () {
// 多个路径用中括号
gulp.src(['src/sass/*.scss','!src/sass/_*.scss'])
// 编辑scss
.pipe(plugins.sass())
// 合并css
.pipe(plugins.concat('index.css'))
// 判断 如果是pro 压缩
.pipe(plugins.if(isProduction,plugins.minifyCss()))
// 判断 如果是pro 加时间戳
.pipe(plugins.if(isProduction,plugins.rename({suffix:'.min_'+timeStamp_prod}),plugins.rename({suffix:'.min'})))
.pipe(gulp.dest('dist/css'))
.pipe(browerSync.reload({
stream: true
}));
});
//图片处理
gulp.task('image',function(){
gulp.src('src/images/*.*')
.pipe(plugins.imagemin())
.pipe(gulp.dest('dist/images'))
.pipe(browerSync.reload({
stream: true
}));
});
//js处理
gulp.task('js',function () {
gulp.src(['src/js/*.js',"!"+ipJS+""])
.pipe(plugins.babel())
.pipe(plugins.concat('main.js'))
.pipe(plugins.if(isProduction,plugins.uglify()))
.pipe(plugins.if(isProduction,plugins.rename({suffix:'.min_'+timeStamp_prod}),plugins.rename({suffix:'.min'})))
.pipe(gulp.dest('dist/js'))
.pipe(browerSync.reload({
stream:true
}));
});
gulp.task('libs',function() {
gulp.src('src/libs/**/*')
.pipe(gulp.dest('dist/libs'))
.pipe(browerSync.reload({
stream:true
}));
})
//清空图片 样式 js
gulp.task('clean', del.bind(null, ['dist/*']));
// 实时监听
gulp.task('serve',function(){
browerSync({
server:{
baseDir:['dist']
},
port: port
},function(err,bs){
console.log(bs.options.getIn(["urls", "local"]));
});
gulp.watch('src/sass/*.scss',['sass']);
gulp.watch('src/js/*.js',['js']);
gulp.watch('src/*.html',['html']);
gulp.watch('src/images/*.*',['image']);
});
gulp.task('build',['clean'],function() {
gulp.start('libs','sass','js','html','image')
})

package.json

{
"name": "gulp",
"version": "1.0.0",
"description": "",
"main": "gulpfile.js",
"scripts": {
"watch": "gulp serve",
"dev": "cross-env gulp build",
"build": "cross-env NODE_ENV=production gulp build"
},
"author": "lhy",
"license": "ISC",
"devDependencies": {
"babel-preset-es2015": "^6.16.0",
"browser-sync": "^2.17.5",
"cross-env": "^3.1.2",
"del": "^2.2.2",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-clean": "^0.3.2",
"gulp-concat": "^2.6.0",
"gulp-htmlmin": "^3.0.0",
"gulp-if": "^2.0.1",
"gulp-imagemin": "^3.0.3",
"gulp-load-plugins": "^1.3.0",
"gulp-minify-css": "^1.2.4",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.5.4",
"gulp-sass": "^2.3.2",
"gulp-sourcemaps": "^2.2.0",
"gulp-uglify": "^2.0.0",
"rename": "^1.0.3",
"tiny-lr": "^1.0.2"
}
}

  

 

 
 
启动监听的另一种方法:http://www.dbpoo.com/getting-started-with-gulp/ 网站上提到的
http-server方式
 
 
gulp 自动化编程

1.命令行创建npm的配置文件

nam init

2.添加一个gulp的依赖

npm install gulp  - - save-dev

3.在项目根目录下添加一个gulpfile.js文件 ,这个文件名是固定不变的

4.在gulpfile.js中添加任务

eg: 1.less编译 压缩 合并(没有必要,一般预处理css都是导包)

2.js合并  压缩  混淆

3.img复制

4.html压缩

//先载入gulp的包  

var gulp =    require(‘gulp’);

//注册任务

//安装 gulp-less  gulp-concat  等包

//引入gulp-less 包   转css用的

var less = require(‘gulp-less’);

//引入gulp-cssnano包   压缩用的

var cssnano = require(‘gulp-cssnano’);

gulp.task(‘style’,function(){

gulp.src([’src/styles/*.less’,’!src/styles/_*.less’])

.pipe(less())//转css

.pipe(cssnano())//压缩

//合并

.pipe(gulp.dest(‘dist/styles’));

});

  

gulp使用 实现文件修改实时刷新的更多相关文章

  1. gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块

    1.压缩tinypng图片   gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...

  2. 使用gulp解决外部编辑器修改Eclipse文件延迟刷新

    本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...

  3. 使用gulp解决外部编辑器修改Eclipse文件延迟更新的问题

    本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...

  4. grunt实现修改代码实时刷新浏览器

    grunt例子:https://github.com/Aquarius1993/gruntDemo grunt 实时刷新1:           1.安装chrome浏览器插件:liveReload ...

  5. 分享Grunt.js配置: watch + liveReload 实时监测文件变化自动刷新浏览器

    http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必 ...

  6. Gulp-livereload:实时刷新编码

    实现功能 监听指定目录下的所有文件,实时动态刷新页面 安装(Install) 功能的实现是借助 gulp-connect 插件完成的;所以,首先通过下面命令完成插件安装: npm install -- ...

  7. webpack-dev-server 搭建本地服务以及浏览器实时刷新

    一.概述开发项目中为了保证上线,开发项目是都需要使用localhost进行开发,以前的做法就是本地搭建Apache或者Tomcat服务器.有的前端开发人员 对服务器的搭建和配置并不熟悉,这个时候需要后 ...

  8. eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究

                    1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...

  9. FusionCharts制作实时刷新图

    转自:http://yklovejava-163-com.iteye.com/blog/1889949 下面介绍的是用FusionCharts制作实时刷新图的过程(FusionCharts确实太好用了 ...

随机推荐

  1. 【前端】vue.js实现按钮的动态绑定

    vue.js实现按钮的动态绑定 实现效果: 实现代码以及注释: <!DOCTYPE html> <html> <head> <title>按钮绑定< ...

  2. Codeforces - 828E DNA Evolution —— 很多棵树状数组

    题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...

  3. cp 复制 mv剪切

    cp cp -p test.rb /home/test    将test.rb copy到test目录,并且保留原文件的属性cp -r Dir/ /home/test    将Dir目录copy到te ...

  4. Docker Mysql主主同步配置搭建Demo

    主主同步配置和主从配置很相似,仅需稍做修改就可以了,对主从配置有疑问可以查看 上一篇文章. 进行Docker操作前,先建立目录,我的路径是d:/docker/mysql,目录结构如下: --mysql ...

  5. Python学习札记(十) Function1 函数调用

    参考:调用函数 Note 1.Python内置了很多函数,我们可以直接对这些函数进行调用.Python官网:Built in Fuctions eg.调用abs函数(取绝对值函数): >> ...

  6. RabbitMQ入门(5)——主题(Topic)

    前面我们介绍了通过使用direct exchage,改善了fanout exchange只能进行虚拟广播的方式.尽管如此,直接交换也有自身的局限,它不能基于多个条件路由. 在我们的日志系统中,也许我们 ...

  7. Springboot依赖注入 Service类中使用静态变量

    @Component public class ServerHandler extends IoHandlerAdapter { @Autowired protected HealthDataServ ...

  8. replace()函数用法

    replace()函数表示将用一个字符串替换字符串中的所出现的特定内容. 语法为:replace(字段1,字段2,字段3),意思为字段3将会替换字段1里与字段2相同的内容  列如: table1 st ...

  9. 今天 学习用到的一些知识(properties 读取,js 删除元素)

    1.properties文件位置的关系:当properties文件放在src目录下时,编译会自动把src里的文件放到bin文件平级,因此可用this.getClass.getClassLoader.g ...

  10. Linux安装jdk、删除Open jdk

    1.将jdk解压安装完成后,在bin目录下查看当前jdk的版本号 命令: ./java -version 2.编辑修改配置 1. 修改profile文件 进入命令:   vi  /etc/profil ...