跳到主要内容

symlink()

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

使用方法​

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

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

exports.link = link;

签名​

symlink(directory, [options])

参数​

参数类型说明
directory
(必填)
string
function
将要创建符号链接的输出目录路径。如果使用函数,则会对每个 Vinyl 对象调用该函数,函数必须返回一个字符串形式的目录路径。
optionsobject详细信息请参见下方的选项。

返回值​

一个流,可以在管道中间或末尾使用,用于在文件系统上创建符号链接。 每当 Vinyl 对象通过流时,它会在给定目录的文件系统上创建一个指向原始文件的符号链接。

每当在文件系统上创建符号链接时,Vinyl 对象将被修改。

  • cwd、base 和 path 属性将更新以匹配创建的符号链接。
  • stat 属性将更新以匹配文件系统上的符号链接。
  • contents 属性将设置为 null。
  • symlink 属性将添加或替换为原始路径。

注意: 在 Windows 上,默认情况下使用联结点(junctions)创建目录链接。useJunctions 选项可以禁用此行为。

错误​

当 directory 为空字符串时,抛出错误,错误信息为"Invalid symlink() folder argument. Please specify a non-empty string or a function."(无效的 symlink() 文件夹参数。请指定非空字符串或函数。)

当 directory 不是字符串或函数时,抛出错误,错误信息为"Invalid symlink() folder argument. Please specify a non-empty string or a function."(无效的 symlink() 文件夹参数。请指定非空字符串或函数。)

当 directory 是一个返回空字符串或 undefined 的函数时,发出错误,错误信息为"Invalid output folder"(无效的输出文件夹)。

选项​

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

名称类型默认值说明
cwdstring
function
process.cwd()将与任何相对路径组合形成绝对路径的目录。对于绝对路径会被忽略。用于避免将 directory 与 path.join() 组合。
dirModenumber
function
创建目录时使用的模式。如果未设置,将使用进程的模式。
overwriteboolean
function
true当为 true 时,覆盖具有相同路径的现有文件。
relativeSymlinksboolean
function
false当为 false 时,创建的任何符号链接将是绝对路径。
注意:如果正在创建的是联结点,则忽略此选项,因为联结点必须是绝对路径。
useJunctionsboolean
function
true此选项仅在 Windows 上相关,在其他地方被忽略。当为 true 时,将目录符号链接创建为联结点。详情见下方 Windows 上的符号链接。

Windows 上的符号链接​

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

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

如果你尝试创建一个悬空(指向不存在目标)链接,则无法自动确定链接类型。在这些情况下,行为将根据是通过 symlink() 还是通过 dest() 创建悬空链接而有所不同。

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

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