Gulp dest()

🌙
手机阅读
本文目录结构

dest()

创建一个用于将 Vinyl 对象写入到文件系统的流。

用法

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

function copy() {
  return src('input/*.js')
    .pipe(dest('output/'));
}

exports.copy = copy;

函数原型

dest(directory, [options])

参数

参数 类型 描述
directory
(required)
string
function
将写入文件的输出目录的路径。如果使用一个函数,该函数将与每个 Vinyl 对象一起调用,并且必须返回一个字符串目录路径。
options object 详情见下文选项。

返回值

返回一个可以在管道的中间或末尾使用的流,用于在文件系统上创建文件。

每当 Vinyl 对象通过流被传递时,它将内容和其他细节写到给定目录下的文件系统。如果 Vinyl 对象具有 symlink 属性,将创建符号链接(symbolic link)而不是写入内容。创建文件后,将更新其元数据以匹配 Vinyl 对象。

在文件系统上创建文件时,Vinyl 对象将被修改。

  • cwdbasepath 属性将被更新以匹配创建的文件。
  • stat 属性将被更新,以匹配文件系统上的文件。
  • 如果 contents 属性是一个流,它将被重置,以便可以再次读取。

可能出现的错误

  • “Invalid dest() folder argument. Please specify a non-empty string or a function.”
  • “nvalid output folder”

选项

对于接受函数的选项,传递的函数将与每个 Vinyl 对象一起调用,并且必须返回另一个列出类型的值。

名称 类型 默认值 注解
cwd string
function
process.cwd() 这个目录将与任何相对路径相结合以形成绝对路径。对于绝对路径忽略。用于避免将 directorypath.join() 相结合。
mode number
function
stat.mode of the Vinyl object 创建文件时使用的模式。如果没有设置,并且缺少 stat.mode,则使用 process’ 模式。
dirMode number
function
创建目录时使用的模式。如果没有设置,将使用 process’ 模式。
overwrite boolean
function
true 如果为 true,则用相同的路径覆盖现有文件。
append boolean
function
false 如果为 true,则将内容添加到文件末尾,而不是替换现有内容。
sourcemaps boolean
string
function
false 如果为 true,则将内联 sourcemaps 写入输出文件。指定一个 string 路径将在给定路径上写入外部 sourcemaps
relativeSymlinks boolean
function
false 当为 false 时,创建的任何符号链接将是绝对的。
注意: 如果正在创建连接,则忽略它们,因为它们必须是绝对的。
useJunctions boolean
function
true 此选项仅适用于 Windows,在其他地方被忽略。当为 true 时,创建目录符号链接作为连接(junction)。详情请见下文 Symbolic links on Windows

元数据更新

每当 dest() 流创建一个文件时,就会将 Vinyl 对象的 modemtimeatime 与创建的文件进行比较。如果它们不同,创建的文件将被更新以反映 Vinyl 对象的元数据。如果这些属性相同,或者 gulp 没有更改的权限,则会跳过该尝试。

在不支持 Node 的 process.getuid()process.geteuid() 方法的 Windows 或其他操作系统上禁用此功能。这是因为 Windows 通过使用 fs.fchmod() 和 `fs.futimes() 会产生意想不到的结果。

注意: fs.futimes() 在内部将 mtimeatime 时间戳转换为秒。这种除以 1000 的方法可能会导致 32 位操作系统的精度有所下降。

Sourcemaps

Sourcemap 支持直接构建到 src()dest() 中,但默认情况下是禁用的。使其能够生成内联或外部 sourcemaps。

内联 sourcemaps

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

src('input/**/*.js', { sourcemaps: true })
  .pipe(uglify())
  .pipe(dest('output/', { sourcemaps: true }));

外部 sourcemaps

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

src('input/**/*.js', { sourcemaps: true })
  .pipe(uglify())
  .pipe(dest('output/', { sourcemaps: '.' }));

在 Windows 上创建符号链接时,type 参数被传递给 Node 的 fs.symlink() 方法,该方法指定被链接的目标的类型。链接类型设置为:

  • 'file',当目标是一个常规文件时
  • 'junction', 当目标是一个目录时
  • 'dir', 当目标是一个目录并且用户禁用了 useJunctions 选项时

如果试图创建 dangling (指向不存在的目标)链接,则无法自动确定链接类型。在这些情况下,根据 dangling 链接是通过 symlink() 创建的还是通过 dest() 创建的,行为会有所不同。

对于通过 symlink() 创建的 dangling 链接,传入的 Vinyl 对象表示目标,因此其 stats 将确定所需的链接类型。如果 isDirectory() 返回 false,则创建一个 'file' 链接,否则根据 useJunctions 选项的值创建一个 'junction''dir' 链接。

对于通过 dest() 创建的 dangling 链接,传入的 Vinyl 对象表示链接——通常通过 src(..., { resolveSymlinks: false }) 从磁盘加载。在这种情况下,无法合理地确定链接类型,默认使用 'file'。如果正在创建指向目录的 dangling 链接,这可能会导致意外行为。避免这种情况。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了