gulp入门教程7:gulp.dest

基本用法

dest() 函数通常与 src() 函数结合使用,以形成一个完整的文件处理管道。以下是一个简单的例子:

const {
    
     src, dest } = require('gulp');

function copyFiles() {
    
    
  return src('src/**/*.js') // 读取 src 目录及其子目录下的所有 .js 文件
    .pipe(dest('dist/')); // 将读取的文件写入到 dist 目录下
}

exports.copyFiles = copyFiles;

在这个例子中,src('src/**/*.js') 读取了 src 目录及其子目录下所有扩展名为 .js 的文件,并通过管道(pipe)将这些文件传递到 dest('dist/'),后者会将文件写入到 dist 目录下。

参数

directory

dest() 函数的第一个参数是 directory,它是一个字符串或函数,用于指定输出目录的路径。如果提供的是函数,该函数将被调用并传入每个 Vinyl 对象,且必须返回一个字符串作为目录路径。

options

dest() 函数还接受一个可选的配置对象 options,用于定制其行为。以下是一些常用的选项:

  • cwd:指定用于与相对路径结合形成绝对路径的目录。默认值为 process.cwd()
  • mode:创建文件时使用的模式(权限)。如果未设置且 Vinyl 对象的 stat.mode 缺失,则使用进程的默认模式。
  • dirMode:创建目录时使用的模式(权限)。如果未设置,则使用进程的默认模式。
  • overwrite:当为 true 时,将覆盖具有相同路径的现有文件。默认值为 true
  • append:当为 true 时,将内容添加到文件的末尾,而不是替换现有内容。默认值为 false
  • sourcemaps:启用源映射支持。可以是布尔值或字符串,用于生成内联或外部源映射。默认值为 false
  • relativeSymlinks:当为 false 时,创建的任何符号链接将是绝对的。默认值为 false
  • useJunctions:仅在 Windows 上相关,当为 true 时,创建目录符号链接作为连接点。默认值为 true

返回值

dest() 返回一个流(stream),这个流可以在管道的中间或末尾使用,以在文件系统上创建文件。每当一个 Vinyl 对象通过这个流时,它会将内容和其他详细信息写入到指定的目录。

错误处理

在使用 dest() 时,需要注意几个可能的错误情况:

  • 如果 directory 是一个空字符串,会抛出一个错误,提示无效的输出目录。
  • 如果 directory 不是字符串或函数,也会抛出一个错误。
  • 如果 directory 是一个函数,但返回了一个空字符串或 undefined,则会发出一个错误事件,提示无效的输出文件夹。

示例

以下是一个更复杂的示例,展示了如何使用 dest() 的选项来定制文件写入行为:

const {
    
     src, dest } = require('gulp');
const uglify = require('gulp-uglify');

function minifyJS() {
    
    
  return src('src/**/*.js', {
    
     sourcemaps: true })
    .pipe(uglify()) // 使用 Uglify 压缩 JavaScript
    .pipe(dest('dist/', {
    
     sourcemaps: true, overwrite: true })); // 将压缩后的文件写入到 dist 目录,并生成内联源映射,覆盖现有文件
}

exports.minifyJS = minifyJS;

在这个示例中,我们使用了 sourcemaps 选项来启用源映射支持,并将 overwrite 选项设置为 true 以覆盖具有相同路径的现有文件。然后,我们使用 Uglify 压缩 JavaScript 文件,并将压缩后的文件写入到 dist 目录,同时生成内联源映射。

通过深入理解 dest() 函数及其选项,你可以更灵活地控制 Gulp 任务中的文件写入行为,从而提高构建效率和可维护性。无论是简单的文件复制,还是复杂的文件处理和转换,dest() 都是你不可或缺的得力助手。