文章の目录
一、获取任务要处理的文件 src
1、概述
创建一个流,用于从文件系统读取 Vinyl 对象。
2、语法
glup.src(globs, [options]);
3、参数
4、选项
对于接受函数的选项,传递的函数将与每个 Vinyl 对象一起调用,并且必须返回另一个列出类型的值。
5、返回值
返回一个可以在管道的开始或中间使用的流,用于根据给定的 globs 添加文件。
6、可能出现的错误
当 globs
参数只能匹配一个文件(如 foo/bar.js
)而且没有找到匹配时,会抛出一个错误,提示 "File not found with singular glob"
。若要抑制此错误,请将 allowEmpty
选项设置为 true
。
当在 globs
中给出一个无效的 glob
时,抛出一个错误,并显示 "Invalid glob argument"
。
二、输出文件 dest
1、概述
创建一个用于将 Vinyl 对象写入到文件系统的流。
2、语法
glup.dest(directory, [options]);
3、参数
4、选项
对于接受函数的选项,传递的函数将与每个 Vinyl 对象一起调用,并且必须返回另一个列出类型的值。
5、返回值
返回一个可以在管道的中间或末尾使用的流,用于在文件系统上创建文件。
每当 Vinyl 对象通过流被传递时,它将内容和其他细节写到给定目录下的文件系统。如果 Vinyl 对象具有 symlink 属性,将创建符号链接(symbolic link)而不是写入内容。创建文件后,将更新其元数据以匹配 Vinyl 对象。
在文件系统上创建文件时,Vinyl 对象将被修改。
- cwd、base 和 path 属性将被更新以匹配创建的文件。
- stat 属性将被更新,以匹配文件系统上的文件。
- 如果 contents 属性是一个流,它将被重置,以便可以再次读取。
6、可能出现的错误
当目录为空字符串时,将抛出一个错误,并提示 “Invalid dest() folder argument. Please specify a non-empty string or a function.”(无效的 dest() 文件夹参数。请指定非空字符串或函数。)
当目录不是字符串或函数时,将抛出一个错误,并提示 “Invalid dest() folder argument. Please specify a non-empty string or a function.”
当 directory 是一个返回空字符串或 undefined 的函数时,将发出一条错误消息 “Invalid output folder”。
7、元数据更新
每当 dest() 流创建一个文件时,就会将 Vinyl 对象的 mode、mtime 和 atime 与创建的文件进行比较。如果它们不同,创建的文件将被更新以反映 Vinyl 对象的元数据。如果这些属性相同,或者 gulp 没有更改的权限,则会跳过该尝试。
在不支持 Node 的 process.getuid()或 process.geteuid() 方法的 Windows 或其他操作系统上禁用此功能。这是因为Windows通过使用 fs.fchmod() 和 `fs.futimes() 会产生意想不到的结果。
注意: fs.futimes() 在内部将 mtime 和 atime 时间戳转换为秒。这种除以 1000 的方法可能会导致 32 位操作系统的精度有所下降。
三、建立 gulp 串行任务 series
1、概述
将任务函数和/或组合操作组合成更大的操作,这些操作将按顺序依次执行。对于使用 series() 和 parallel() 组合操作的嵌套深度没有强制限制。
2、语法
gulp.series(...tasks);
3、参数
4、返回值
返回一个组合操作,它将注册为任务或嵌套在其他 series 和/或 parallel 组合中。
当执行组合操作时,所有任务将按顺序运行。如果一个任务中发生错误,则不会运行后续任务。
5、可能出现的错误
当没有传递任何任务时,抛出一个错误,并提示 “One or more tasks should be combined using series or parallel”。(一个或多个应该使用 series 或 parallel 组合的任务”。)
当传递无效的任务或未注册的任务时,将抛出一个错误,显示 “Task never defined”(任务从未定义)。
6、示例
function javascript(cb) {
src("./public/lib/sweetalert/sweetalert.min.js").pipe(dest("./dist/lib/sweetalert"));
cb();
}
exports.build = series(javascript);
gulp build
四、建立 gulp 并行任务 parallel
1、概述
将任务功能和/或组合操作组合成同时执行的较大操作。对于使用 series() 和 parallel() 进行嵌套组合的深度没有强制限制。
2、语法
gulp.parallel(...tasks);
3、参数
4、返回值
返回一个组合操作,它将注册为任务或嵌套在其他 series 和/或 parallel 组合中。
当执行组合操作时,所有任务将以最大并发性运行。如果一个任务发生错误,其他任务可能不确定地完成,也可能不完成。
5、可能出现的错误
当没有传递任何任务时,抛出一个错误,并提示 “One or more tasks should be combined using series or parallel”。(一个或多个应该使用 series 或 parallel 组合的任务”。)
当传递无效的任务或未注册的任务时,将抛出一个错误,显示 “Task never defined”(任务从未定义)。
6、示例
function javascript(cb) {
src("./public/lib/sweetalert/sweetalert.min.js").pipe(dest("./dist/lib/sweetalert"));
cb();
}
exports.build = parallel(javascript);
gulp build
五、监控文件变化 watch
1、概述
监听 globs 并在发生更改时运行任务。任务与任务系统的其余部分被统一处理。
2、语法
gulp.watch(globs, [options], [task]);
3、参数
4、选项
5、返回值
chokidar 的一个实例,用于对监听设置进行细粒度控制。
6、可能出现的错误
当以 globs 形式传递非字符串或带有任何非字符串的数组时,将抛出一个错误,并提示 “Non-string provided as watch path”。
当字符串或数组作为 task 传递时,会抛出一个错误,提示 “watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)”( watch 任务必须是一个函数(可以选择使用 gulp.parallel 或 gulp.series 生成))。
7、Chokidar 实例
watch() 方法返回 chokidar 的底层实例,提供对监听设置的细粒度控制。最常用来注册提供更改文件的 path 或 stats 的单个事件处理程序。
当直接使用 chokidar 实例时,您将无法访问任务系统集成,包括异步完成、队列和延迟
7.1、watcher.on(eventName, eventHandler)
注册 eventHandler 函数,当指定的事件发生时调用该函数。
7.2、watcher.close()
关闭文件监听器。一旦关闭,就不会再发出任何事件。
7.3、watcher.add(globs)
向已经运行的监听器实例添加额外的 globs。
7.4、watcher.unwatch(globs)
删除正在被监听的 globs,而监视程序继续使用剩余的路径。
8、示例
function watchCSS(cb) {
const watcher = watch("./public/css/*.css");
watcher.on("change", function (path, stats) {
console.log(`File ${
path} was change`);
});
cb();
}
exports.build = parallel(watchCSS);
gulp build
写在最后
如果你感觉文章不咋地
//(ㄒoㄒ)//
,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L;~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※
!!!