gulp入门教程9:lastRun
什么是lastRun?
lastRun
是Gulp提供的一个函数,用于检索一个任务在当前运行进程中最后一次成功完成的时间。当与src
函数结合使用时,它可以根据文件的最后修改时间(mtime)与任务最后成功运行的时间进行比较,从而决定哪些文件需要被处理,哪些文件可以跳过。
基本用法
首先,你需要安装Gulp及其相关插件。如果还没有安装,可以通过npm进行安装:
npm install --save-dev gulp gulp-imagemin
接下来,我们来看一个使用lastRun
的示例。在这个示例中,我们将对src/images
目录下的JPEG图片进行压缩,并将压缩后的图片保存到build/img
目录。通过使用lastRun
,我们只会压缩那些自上次任务运行以来发生变化的图片。
const { src, dest, lastRun, watch } = require('gulp');
const imagemin = require('gulp-imagemin');// 定义图片压缩任务
function images() {return src('src/images/**/*.jpg', { since: lastRun(images) }).pipe(imagemin()).pipe(dest('build/img/'));
}// 默认任务,监视图片文件的变化
exports.default = function() {watch('src/images/**/*.jpg', images);
};
在这个示例中,src
函数的第二个参数是一个选项对象,其中since
属性被设置为lastRun(images)
的返回值。这意味着src
只会选择那些最后修改时间晚于images
任务上次成功运行时间的JPEG图片文件。
参数说明
- task(必需):可以是一个任务函数或者一个已注册任务的字符串别名。
- precision(可选):时间戳的精度,默认为Node v0.10上的1000毫秒,Node v0.12+上为0毫秒。如果你的文件系统或Node版本的文件时间属性精度较低,可以通过这个参数来调整时间戳的精度。
错误处理
- 如果
lastRun
被调用时传入的不是函数或字符串,会抛出一个错误,消息为"Only functions can check lastRun"。 - 如果在不支持
WeakMap
的环境中调用lastRun
,并且传入的是一个不可扩展的函数,也会抛出错误,消息为"Only extensible functions can check lastRun"。
时间戳精度
根据你的Node版本和文件系统,文件的最后修改时间(mtime)精度可能会有所不同。lastRun
函数允许你通过precision
参数来调整这个时间戳的精度,以适应不同的环境。
例如:
lastRun(someTask)
可能返回1426000001111
(精确到毫秒)。lastRun(someTask, 100)
可能返回1426000001100
(精确到百毫秒)。lastRun(someTask, 1000)
可能返回1426000001000
(精确到秒)。
结论
通过使用lastRun
函数,你可以轻松地实现Gulp任务的增量构建,从而显著提高构建效率。这对于处理大量文件或频繁更改的项目尤其有用。希望本文能够帮助你更好地理解和使用lastRun
函数来优化你的Gulp构建流程。