淘宝镜像:$ npm install -g cnpm --registry=https://registry.npm.taobao.org
gulp-uglify: 压缩js
gulp-concat: 合并文件
gulp-rename: 重命名文件
gulp-htmlmin: 压缩html
gulp-clean: 清空文件夹
|–.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配置文件
六 编写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"
}
}
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使用 实现文件修改实时刷新的更多相关文章
-
gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块
1.压缩tinypng图片 gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...
-
使用gulp解决外部编辑器修改Eclipse文件延迟刷新
本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...
-
使用gulp解决外部编辑器修改Eclipse文件延迟更新的问题
本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...
-
grunt实现修改代码实时刷新浏览器
grunt例子:https://github.com/Aquarius1993/gruntDemo grunt 实时刷新1: 1.安装chrome浏览器插件:liveReload ...
-
分享Grunt.js配置: watch + liveReload 实时监测文件变化自动刷新浏览器
http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必 ...
-
Gulp-livereload:实时刷新编码
实现功能 监听指定目录下的所有文件,实时动态刷新页面 安装(Install) 功能的实现是借助 gulp-connect 插件完成的;所以,首先通过下面命令完成插件安装: npm install -- ...
-
webpack-dev-server 搭建本地服务以及浏览器实时刷新
一.概述开发项目中为了保证上线,开发项目是都需要使用localhost进行开发,以前的做法就是本地搭建Apache或者Tomcat服务器.有的前端开发人员 对服务器的搭建和配置并不熟悉,这个时候需要后 ...
-
eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究
1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...
-
FusionCharts制作实时刷新图
转自:http://yklovejava-163-com.iteye.com/blog/1889949 下面介绍的是用FusionCharts制作实时刷新图的过程(FusionCharts确实太好用了 ...
随机推荐
-
ARM大学计划全球经理到访华清远见,深入交流教育合作
来源:华清远见嵌入式学院 10月20日,ARM大学计划全球经理Khaled Benkrid,高级内容主编洪川博士在ARM大学计划亚太经理陈炜博士的陪同下到访华清远见,就最新嵌入式技术.ARM处理器在教 ...
-
ksvcreate: Process(m000) creation failed
一测试服务器数据库(Oracle Database 10g Release 10.2.0.5.0 - 64bit Production)突然访问不了,检查发现数据库处于挂起模式(hang mode), ...
-
Delphi面向对象的方法
方法是属于一个给定对象的过程和函数,方法反映的是对象的行为而不是数据,前一篇提到的对象的两个重要的方法:构造方法和析构方法. 为了使对象能执行各种功能,你能在对象中定制方法 创建一个方法用两个步骤,首 ...
-
hdu 2191 完全背包
为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最多能采购多少 ...
-
初学tornado之MVC版helloworld
作者:the5fire | 标签: MVC tornado | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...
-
Web Api Route 注册要放在 Mvc Route 注册前
今天想研究一下Web Api,写了一个测试Api,打开网站后浏览一下,可是却提示找不到方法,刚开始以为哪里配置错了,可找了半天也没见. 因为我是在一个现有Mvc站点做的Demo,所以打算新建一个Mvc ...
-
C语言客户端服务器代码
/* sockclnt.c*/ #include <stdio.h>#include <string.h>#include <stdlib.h>#include & ...
-
NYOJ--86--set.find()--找球号(一)
/* Name: NYOJ--86--找球号(一) Date: 20/04/17 14:45 Description: 理想很美好,现实很残酷,准备用字符串水过,结果TLE了 ╮(╯▽╰)╭ */ # ...
-
javascript 体验倒计时:距离国庆还有多长时间
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
Android数据存储:File
Android数据存储之File Files:它通过FileInputStream和FileOuputStream对文件进行操作.但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写 ...