gulp使用 实现文件修改实时刷新
淘宝镜像:$ 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确实太好用了 ...
随机推荐
- MR案例:链式ChainMapper
类似于Linux管道重定向机制,前一个Map的输出直接作为下一个Map的输入,形成一个流水线.设想这样一个场景:在Map阶段,数据经过mapper01和mapper02处理:在Reduce阶段,数据经 ...
- js 自定义事件观察者模式(发布/订阅)
/* * 示例: * Event.create("namespace1").listen('click', function(a){ * console.log(a); * }); ...
- Tornado异步(2)
Tornado异步 因为epoll主要是用来解决网络IO的并发问题,所以Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求. 1. tornado.httpclient.Async ...
- Mysql MariaDB安装
1.安装 本人使用的是CentOS 7 ,默认yum安装,但默认yum安装版本有点低,可根据需要选择升级,我这里选择先升级再安装. 更新yum //更新yum包 yum -y update 配置yum ...
- XML CDATA是什么?
XML CDATA是什么? 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 这篇文章主要为大家介绍下XML CDATA是什么,学习xml的朋友可以参考下 All text in ...
- 好的Mysql 查询语句
select swr.id,swr.name,swr.sort as type,count(swl.id) as nums,ifnull(sum(swl.package_num),0) package ...
- Android -- ContentProvider, 读取和保存系统 联系人
1. 示例代码 需要的读写联系人的权限 <uses-permission android:name="android.permission.WRITE_CONTACTS"/& ...
- ios 下拉刷新开源框架 MJRefresh
gitHub 下载框架 搜索MJExampleViewController.h 下拉刷新 MJTableViewController 上拉刷新 MJTableViewController Collec ...
- (转)浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
- JSP 表达式语言
JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整型数,浮点 ...