gulp系列之常用的方法


一、获取任务要处理的文件 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^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

猜你喜欢

转载自blog.csdn.net/weixin_62277266/article/details/127035507
今日推荐