gulp监听文件变化,并拷贝到指定目录
暂时不支持目录修改、创建、删除
var gulp = require('gulp');
var fs = require('fs');
var path = require('path');
var less = require('gulp-less');
var sass = require('gulp-sass');
var minifycss = require('gulp-minify-css');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var del = require('del');
var tinylr = require('tiny-lr');
var server = tinylr();
var port = 1234; // browser-sync
var browserSync = require('browser-sync'); // 创建多层目录
function mkdirs(dirname, mode, callback){
fs.exists(dirname, function (exists){
if(exists){
callback();
}else{
//console.log(path.dirname(dirname));
mkdirs(path.dirname(dirname), mode, function (){
fs.mkdir(dirname, mode, callback);
});
}
});
} // 拷贝文件
function copyfile(oldPath, newPath) {
console.log('复制'+oldPath+' -> '+newPath); var stat = fs.lstatSync(oldPath);
if(stat.isDirectory()) {
console.log(oldPath+'是目录');
return false;
} var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.pipe(writeStream);
readStream.on('end', function () {
console.log('copy end');
});
readStream.on('error', function () {
console.log('copy error');
});
} gulp.task('default', function() { }); gulp.task('css', function() {
return gulp.src('src/*.css') //压缩的文件
.pipe(gulp.dest('target/css')) //输出文件夹
.pipe(minifycss()); //执行压缩
}); // 编译Sass
gulp.task('sass', function() {
gulp.src('./src/css/*.scss')
.pipe(sass())
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('target/css'));
}); gulp.task('js', function() {
return gulp.src('./src/js/*.js')
.pipe(gulp.dest('target/js')) //输出main.js到文件夹
.pipe(rename({suffix: '.min'})) //rename压缩后的文件名
.pipe(uglify()) //压缩
.pipe(gulp.dest('target/js')); //输出
}); gulp.task('html', function() {
return gulp.src('./src/*.php')
.pipe(gulp.dest('target/')); //输出
}); // 监听任务 运行语句 gulp watch
gulp.task('watch',function(){
server.listen(port, function(err){
if (err) {
return console.log(err);
} //拷贝修改过的文件
gulp.watch('src/**/**', function(e) {
console.log(e);
var oldPath = e.path;
var newPath = oldPath.replace('\\src\\', '\\target\\');
var newDirPathTemp = newPath.split("\\");
var currentPath = fs.realpathSync('.');
var newDirPath = [];
for(var i = 0; i < newDirPathTemp.length-1; i++) {
newDirPath[i] = newDirPathTemp[i];
}
newDirPath = newDirPath.join("\\");
newDirPath = newDirPath.replace(currentPath, '');
newDirPath = newDirPath.replace(/\\/g, "/");
newDirPath = newDirPath.replace("/", "./");
//console.log('当前路径'+newDirPath); // 修改或增加时
if('added' == e.type || 'changed' == e.type || 'renamed' == e.type) {
// 判断目录是否存在,不存在则创建
fs.exists(newDirPath, function(exists){
if(exists){
//console.log("文件夹存在");
copyfile(oldPath, newPath);
} else {
//console.log("文件夹不存在,则创建目录");
mkdirs(newDirPath); // 延时,等待目录创建完成
setTimeout(function(){
copyfile(oldPath, newPath);
}, 200);
}
});
} else if('deleted' == e.type) { //删除
fs.unlink(newPath, function(err){
console.log('删除'+newPath+err);
});
}
}); // 监听sass
gulp.watch('src/css/*.scss', function(){
gulp.run('sass');
}); // 监听js
gulp.watch('./src/js/*.js', function(){
gulp.run('js');
}); // 监听html
gulp.watch('./src/*.php', function(){
gulp.run('html');
}); }); // 实时同步到浏览器
browserSync.init(['target/css/*', 'target/js/*', 'target/*.html', 'target/*.php'], {
/* 静态服务
server: {
baseDir: "target"
}
*/ // 代理模式
proxy: "dz.com"
}); });
gulp监听文件变化,并拷贝到指定目录的更多相关文章
- gulp监听文件变化,并拷贝到指定目录(转)---参考记录
###暂时不支持目录修改.创建.删除.var gulp = require('gulp'); var fs = require('fs'); var path = require('path'); v ...
- 如何使用NodeJs来监听文件变化
1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工 ...
- node.js监听文件变化
前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...
- 利用WatchService监听文件变化
在实现配置中心的多种方案中,有基于JDK7+的WatchService方法,其在单机应用中还是挺有实践的意义的. 代码如下: package com.longge.mytest; import jav ...
- shell遍历文件目录,监听文件变化,拼接字符串
最近利用业余时间学习了shell 并做了个例子 实现的功能是 : 监听demo文件夹下的文件,只要新增了 .js的文件就把对应的文件名重组,拼接, 最后写入到demo.js里面. 文件结构如下 : ...
- gulp之sass 监听文件,自动编译
gulpfile.js文件如下: var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('default', f ...
- 玩转gulp之watch监听文件自动编译
博客移至 https://www.dodoblog.cn/blog?id=5befc928e0feb34495b57035 我们在写页面的时候,用到sass less等css预处理器的时候,虽然写的很 ...
- Java NIO.2 使用Path接口来监听文件、文件夹变化
Java7对NIO进行了大的改进,新增了许多功能: 对文件系统的访问提供了全面的支持 提供了基于异步Channel的IO 这些新增的IO功能简称为 NIO.2,依然在java.nio包下. 早期的Ja ...
- 【转载】java 监听文件或者文件夹变化的几种方式
1.log4j的实现的文件内容变化监听 package com.jp.filemonitor; import org.apache.log4j.helpers.FileWatchdog; public ...
随机推荐
- 114 的 dns 的解析测试
114 的 dns 号称使用 BGP Global AnyCast 技术多点部署 的方式, 可以将用户请求导向到"就近"的服务器,理论上是可以得到域名网络就近解析的IP的,所以将 ...
- 两台装有Ubuntu系统的服务器搭建VPN(一台为本地服务器,另一台为云服务器)
我们搭建VPN采用的是openvpn,搭建过程总体需要经过三大步骤: 1.openvpn的安装与配置 2.端口转发 3.系统重启iptables规则自动生效 注意:以下所有名令在ro ...
- A、B、C、D和E类IP地址
IP地址分为A,B,C,D,E五类. 网络号:用于识别主机所在的网络:主机号:用于识别该网络中的主机. 其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用.这三种是主要的. IP ...
- C# dll加载,抽象方法的使用
抽象类! dll的使用 /// <summary> /// 返回类型--插件 /// </summary> /// <param name="baseName& ...
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...
- Android新手踩到的一些雷,记录一下~
这两天在搞一个android的app ,由于是新手,注定要踩很多坑. 这里是一些遇到的一些问题,网上各种找答案,感谢各位博主.这里记录一下,留待以后再看. 1. android layout_weig ...
- Xcode 7如何 免费 真机调试iOS应用
运行Xcode后,点击菜单中的Preferences…进入Accounts标签,这里选择添加Apple ID: 在弹出的对话框中登入你的Apple ID,没有的话去注册一个就是了,登录成功后会看到下面 ...
- sqlserver查看所有的外键约束
select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外键列, object_name(b.reference ...
- iOS---XMPP环境搭建过程
什么是即时通信? 即时通信是目前Internet上最为流行的通讯方式, 各种各样的即时通讯软件也层出不穷, 服务提供商也提供了越来越枫木的通讯服务功能. 即时通讯有多重实现方式, XMPP就是其中一种 ...
- C语言程序设计第9堂作业
一.本次课主要内容: 本章将散布在前五章中的数据类型和表达式等内容做了归纳性的汇总,本次课需要掌握以下两个方面: (1)本次课通过从数据在计算机内的存储格式入手,介绍整型.字符型.单精度和双精度实型四 ...