#
dest()创建一个流,用于将 Vinyl 对象写入文件系统。
#
用法#
签名#
参数参数 | 类型 | 备注 |
---|---|---|
directory (必需) | 字符串 函数 | 文件将被写入到的输出目录的路径。如果使用函数,则该函数将使用每个 Vinyl 对象调用,并且必须返回一个字符串目录路径。 |
options | 对象 | 在下面的选项中详细说明。 |
#
返回可以在管道中间或末尾使用的流,用于在文件系统上创建文件。每当 Vinyl 对象通过流时,它会将内容和其他详细信息写入给定目录中的文件系统。如果 Vinyl 对象具有 symlink
属性,则会创建符号链接,而不是写入内容。创建文件后,其 元数据将被更新 以匹配 Vinyl 对象。
每当在文件系统上创建文件时,Vinyl 对象都会被修改。
cwd
、base
和path
属性将被更新以匹配创建的文件。stat
属性将被更新以匹配文件系统上的文件。- 如果
contents
属性是流,它将被重置,以便可以再次读取。
#
错误当 directory
为空字符串时,抛出带有消息“无效的 dest() 文件夹参数。请指定一个非空字符串或函数”的错误。
当 directory
不是字符串或函数时,抛出带有消息“无效的 dest() 文件夹参数。请指定一个非空字符串或函数”的错误。
当 directory
是返回空字符串或 undefined
的函数时,发出带有消息“无效的输出文件夹”的错误。
#
选项对于接受函数的选项,将使用每个 Vinyl 对象调用传递的函数,并且必须返回另一列出的类型的值。
名称 | 类型 | 默认值 | 备注 |
---|---|---|---|
cwd | 字符串 函数 | process.cwd() | 将与任何相对路径结合以形成绝对路径的目录。对于绝对路径,将忽略它。用于避免将 directory 与 path.join() 结合使用。 |
mode | 数字 函数 | Vinyl 对象的 stat.mode | 创建文件时使用的模式。如果没有设置并且 stat.mode 丢失,则将使用进程模式。 |
dirMode | 数字 函数 | 创建目录时使用的模式。如果没有设置,则将使用进程模式。 | |
overwrite | 布尔值 函数 | true | 为 true 时,覆盖具有相同路径的现有文件。 |
append | 布尔值 函数 | false | 为 true 时,将内容添加到文件的末尾,而不是替换现有内容。 |
sourcemaps | 布尔值 字符串 函数 | false | 为 true 时,将内联 sourcemaps 写入输出文件。指定一个 string 路径将在给定路径处写入外部 sourcemaps。 |
relativeSymlinks | 布尔值 函数 | false | 为 false 时,创建的任何符号链接都将是绝对的。 注意:如果正在创建连接点,则忽略此项,因为它们必须是绝对的。 |
useJunctions | 布尔值 函数 | true | 此选项仅与 Windows 相关,在其他地方被忽略。为 true 时,将目录符号链接创建为连接点。详情见下文 Windows 上的符号链接。 |
#
元数据更新每当 dest()
流创建文件时,都会将 Vinyl 对象的 mode
、mtime
和 atime
与创建的文件进行比较。如果它们不同,则将更新创建的文件以反映 Vinyl 对象的元数据。如果这些属性相同,或者 gulp 没有权限进行更改,则会静默跳过尝试。
此功能在 Windows 或不支持 Node 的 process.getuid()
或 process.geteuid()
方法的其他操作系统上禁用。这是因为 Windows 通过使用 fs.fchmod()
和 fs.futimes()
会产生意外结果。
注意:fs.futimes()
方法在内部将 mtime
和 atime
时间戳转换为秒。在 32 位操作系统上,这种除以 1000 的操作可能会导致一些精度损失。
#
SourcemapsSourcemap 支持直接内置于 src()
和 dest()
中,但默认情况下禁用。启用它以生成内联或外部 sourcemaps。
内联 sourcemaps
外部源映射
#
Windows 上的符号链接在 Windows 上创建符号链接时,将向 Node 的 fs.symlink()
方法传递一个 type
参数,该参数指定要链接的目标类型。链接类型设置为
- 目标是常规文件时为
'file'
- 目标是目录时为
'junction'
- 目标是目录且用户禁用了
useJunctions
选项时为'dir'
如果您尝试创建一个悬空链接(指向不存在的目标),则无法自动确定链接类型。在这些情况下,行为将根据悬空链接是通过 symlink()
还是通过 dest()
创建而有所不同。
对于通过 symlink()
创建的悬空链接,传入的 Vinyl 对象表示目标,因此其状态将确定所需的链接类型。如果 isDirectory()
返回 false,则创建 'file'
链接,否则根据 useJunctions
选项的值创建 'junction'
或 'dir'
链接。
对于通过 dest()
创建的悬空链接,传入的 Vinyl 对象表示链接 - 通常通过 src(..., { resolveSymlinks: false })
从磁盘加载。在这种情况下,无法合理地确定链接类型,并且默认为使用 'file'
。如果您正在创建到目录的悬空链接,这可能会导致意外行为。避免这种情况。