前言

gulp-changed插件的作用,是用来过滤未被修改过的文件,只有修改后的文件才能通过管道。这样做的好处时,只处理修改后的文件,减少后续程序的执行时间。
根据官方给出的例子:
const SRC = 'src/*.js';
const DEST = 'dist';
gulp.task('default', () => {
return gulp.src(SRC)
.pipe(changed(DEST))
.pipe(gulp.dest(DEST))
.pipe( /* 其他操作 */ );
});
检测SRC中的文件,然后把从changed()通过的文件输出到DEST文件夹中,然后继续进行后续的操作。在这之前,我写的代码是这样子的,没有传入参数,也没有输出到某文件夹中(gulp.dest(DEST) ):
gulp.task('default', () => {
return gulp.src('src/*.js')
.pipe(changed())
.pipe( /* 其他操作 */ );
});
然后发现,每次执行时,所有的文件都会通过管道,根本没有过滤的作用。看了源代码之后才知道,传递参数和文件输出是必须的,因为程序里是拿两个文件夹SRC和DEST里的文件进行对比的。
每当检测一个程序时,都会去DEST里的文件夹里寻找这个对应的文件,若DEST最后修改时间发生变化或内容已更新,则表明这是一个新文件,通过管道,否则保留。程序里目前使用的是两个文件最后修改时间的对比,若SRC里的文件的最后修改时间比DEST里文件的最后修改时间要大,说明该文件被修改过。
当然,gulp-changed还提供了一种比较函数:内容的对比。将源文件和目标文件的内容进行sha1加密后,比较两者的加密串,若不相同,则通过管道。
可通过传递参数修改比对函数:
gulp.task('default', () => {
return gulp.src(SRC)
.pipe(changed(DEST, {hasChanged: changed.compareSha1Digest}))
.pipe(gulp.dest(DEST))
.pipe( /* 其他操作 */ );
});
当然,你可以传递自己定义的函数,但是需支持以下4个参数:
源码讲解
这个方法里,是对两个文件最后修改时间的对比
function compareLastModifiedTime(stream, cb, sourceFile, targetPath) {
// 获取目标文件的状态
fs.stat(targetPath, function (err, targetStat) {
// 若源文件存在
if (!fsOperationFailed(stream, sourceFile, err)) {
// 对比两者的最后修改时间
if (sourceFile.stat.mtime > targetStat.mtime) {
stream.push(sourceFile);
}
}
cb();
});
}
这里有个疑问的地方:
mtime, atime, ctime
上面中的mtime表示修改时间,此外,文件还几个跟时间有关的属性,这里也稍微的讲解一下。
ATIME-ACCESS TIME
该字段表示文件中的数据最后一次被访问的时间–通过unix进行直接读取或通过命令行和脚本读取。
CTIME-CHANGE TIME
当您更改文件的所有权或访问权限时,ctime也随之变化。当然,内容更新时,ctime也会发生改变。
MTIME-MODIFY TIME
最后修改时间显示上次更改文件内容的时间。它不与文件权限的变化而变化,并因此用于跟踪文件内容的实际变化。
通过LS显示这三种时间
最简单的确认这些时间的方式是使用ls命令,我现在用的是windows系统,安装了一个ConEmu。
使用ls -l显示的时间就是当前文件最后一次修改的时间,即mtime:
-rw-r--r-- 1 root 1049089 2676 一月 20 03:06 gulpfile.js
使用ls -lu显示的是文件最后一次被访问的时间,即atime:
-rw-r--r-- 1 root 1049089 2676 十一 24 09:18 gulpfile.js
使用ls -lc显示的是文件最后一次权限被修改的时间,即ctime:
-rw-r--r-- 1 root 1049089 2676 一月 20 03:06 gulpfile.js
通过STAT显示这三种时间
使用stat命令可以显示这个文件更加详细的信息:
$ stat gulpfile.js File: ‘gulpfile.js' Size: 2676 Blocks: 4 IO Block: 65536 regular file Device: d6be5777h/3602798455d Inode: 844424930178810 Links: 1 Access: (0644/-rw-r--r--) Uid: (1435492/root) Gid: (1049089/ UNKNOWN) Access: 2015-11-24 09:18:34.008292400 +0000 Modify: 2016-01-20 03:06:34.035859700 +0000 Change: 2016-01-20 07:04:40.432046400 +0000 Birth: 2015-11-24 09:18:33.965292400 +0000
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# gulp
# changed
# 用法
# nodejs实现简单的gulp打包
# gulp安装以及打包合并的方法教程
# JS中使用gulp实现压缩文件及浏览器热加载功能
# gulp教程_从入门到项目中快速上手使用方法
# 前端构建工具之gulp的配置与搭建详解
# 写gulp遇到的ES6问题详解
# 的是
# 这三种
# 几个
# 看了
# 也会
# 有个
# 你可以
# 夹中
# 在这
# 我现在
# 执行时间
# 这是一个
# 才知道
# 这样做
# 不存在
# 这篇文章
# 后将
# 可通过
# 会去
# 这样子
相关文章:
如何构建满足综合性能需求的优质建站方案?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
平台云上自助建站如何快速打造专业网站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
常州自助建站费用包含哪些项目?
b2c电商网站制作流程,b2c水平综合的电商平台?
太原网站制作公司有哪些,网约车营运证查询官网?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何通过建站之星自助学习解决操作问题?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
深入理解Android中的xmlns:tools属性
小型网站建站如何选择虚拟主机?
如何通过虚拟主机快速搭建个人网站?
大同网页,大同瑞慈医院官网?
宝塔新建站点为何无法访问?如何排查?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何在云指建站中生成FTP站点?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
在线教育网站制作平台,山西立德教育官网?
如何通过老薛主机一键快速建站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
测试制作网站有哪些,测试性取向的权威测试或者网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
建站主机选购指南:核心配置优化与品牌推荐方案
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在Golang中使用replace替换模块_指定本地或远程路径
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站之星微信建站一键生成小程序+多端营销系统
Swift中switch语句区间和元组模式匹配
如何在阿里云通过域名搭建网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
广平建站公司哪家专业可靠?如何选择?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何快速生成ASP一键建站模板并优化安全性?
如何在宝塔面板创建新站点?
音乐网站服务器如何优化API响应速度?
建站之星代理平台如何选择最佳方案?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
实现虚拟支付需哪些建站技术支撑?
郑州企业网站制作公司,郑州招聘网站有哪些?
香港服务器如何优化才能显著提升网站加载速度?
建站之星下载版如何获取与安装?
如何配置支付宝与微信支付功能?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何通过虚拟机搭建网站?详细步骤解析
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何用PHP工具快速搭建高效网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。