跳到主要内容

Vinyl

一种虚拟文件格式。当通过 src() 读取文件时,会生成一个 Vinyl 对象来表示该文件 - 包括路径、内容和其他元数据。

Vinyl 对象可以使用插件应用转换。它们也可以使用 dest() 持久化到文件系统。

当创建自己的 Vinyl 对象(而不是用 src() 生成)时,请使用外部的 vinyl 模块,如下面的使用示例所示。

用法

const Vinyl = require('vinyl');

const file = new Vinyl({
cwd: '/',
base: '/test/',
path: '/test/file.js',
contents: new Buffer('var x = 123')
});

file.relative === 'file.js';

file.dirname === '/test';
file.dirname = '/specs';
file.path === '/specs/file.js';

file.basename === 'file.js';
file.basename = 'file.txt';
file.path === '/specs/file.txt';

file.stem === 'file';
file.stem = 'foo';
file.path === '/specs/foo.txt';
file.extname === '.txt';
file.extname = '.js';
file.path === '/specs/foo.js';

签名

new Vinyl([options])

参数

参数类型说明
optionsobject详见下方选项

返回值

Vinyl 类的一个实例,表示单个虚拟文件,详见下方Vinyl 实例

错误

当任何传入的选项不符合实例属性定义时(例如,如果 path 被设置为一个数字),将按表中定义抛出错误。

选项

名称类型默认值说明
cwdstringprocess.cwd()从中导出相对路径的目录。将被规范化并移除尾部分隔符。
basestring用于计算 relative 实例属性。如果未设置,则回退到 cwd 的值。通常设置为 glob 基础路径。将被规范化并移除尾部分隔符。
pathstring完整的绝对文件路径。将被规范化并移除尾部分隔符。
historyarray[ ]一个路径数组,用于预先填充 Vinyl 实例的 history。通常来自从先前的 Vinyl 对象派生出新的 Vinyl 对象。如果同时传递了 pathhistory,则 path 会被附加到 history 上。每个项目都将被规范化并移除尾部分隔符。
statobjectfs.Stats 的一个实例,通常是对文件调用 fs.stat() 的结果。用于确定 Vinyl 对象表示的是目录还是符号链接。
contentsReadableStream
Buffer
null
null文件的内容。如果 contents 是 ReadableStream,它将被包装在一个 cloneable-readable 流中。

options 上的任何其他属性将直接分配给 Vinyl 实例。

const Vinyl = require('vinyl');

const file = new Vinyl({ foo: 'bar' });
file.foo === 'bar';

Vinyl 实例

每个 Vinyl 对象实例都有属性和方法来访问和/或修改有关虚拟文件的信息。

实例属性

所有内部管理的路径 - 除 contentsstat 外的任何实例属性 - 都被规范化并移除尾部分隔符。有关更多信息,请参阅规范化和拼接

属性类型描述抛出错误条件
contentsReadableStream
Buffer
null
获取和设置虚拟文件的内容。如果设置为 ReadableStream,它将被包装在 cloneable-readable 流中。如果设置为 ReadableStream、Buffer 或 null 以外的任何值。
statobject获取和设置 fs.Stats 的实例。用于确定 Vinyl 对象表示的是目录还是符号链接。
cwdstring获取和设置当前工作目录。用于派生相对路径。如果设置为空字符串或任何非字符串值。
basestring获取和设置基础目录。用于计算 relative 实例属性。在由 src() 生成的 Vinyl 对象上,将设置为 glob 基础路径。如果设置为 nullundefined,则回退到 cwd 实例属性的值。如果设置为空字符串或任何非字符串值(除了 nullundefined)。
pathstring获取和设置完整的绝对文件路径。设置为与当前 path 不同的值会将新路径附加到 history 实例属性。如果设置为任何非字符串值。
historyarrayVinyl 对象被分配的所有 path 值的数组。第一个元素是原始路径,最后一个元素是当前路径。此属性及其元素应被视为只读,只能通过设置 path 实例属性间接更改。
relativestring获取 basepath 实例属性之间的相对路径段。如果设置为任何值。如果在 path 不可用时访问。
dirnamestring获取和设置 path 实例属性的目录。如果在 path 不可用时访问。
stemstring获取和设置 path 实例属性的主干(不带扩展名的文件名)。如果在 path 不可用时访问。
extnamestring获取和设置 path 实例属性的扩展名。如果在 path 不可用时访问。
basenamestring获取和设置 path 实例属性的文件名(stem + extname)。如果在 path 不可用时访问。
symlinkstring获取和设置符号链接的引用路径。如果设置为任何非字符串值。

实例方法

方法返回类型返回值
isBuffer()boolean如果 contents 实例属性是 Buffer,则返回 true。
isStream()boolean如果 contents 实例属性是 Stream,则返回 true。
isNull()boolean如果 contents 实例属性是 null,则返回 true。
isDirectory()boolean如果实例表示一个目录,则返回 true。当 isNull() 返回 true,stat 实例属性是一个对象,且 stat.isDirectory() 返回 true 时,实例被视为目录。这假定 Vinyl 对象是用有效的(或适当模拟的)fs.Stats 对象构造的。
isSymbolic()boolean如果实例表示一个符号链接,则返回 true。当 isNull() 返回 true,stat 实例属性是一个对象,且 stat.isSymbolicLink() 返回 true 时,实例被视为符号链接。这假定 Vinyl 对象是用有效的(或适当模拟的)fs.Stats 对象构造的。
clone([options])object一个新的 Vinyl 对象,所有属性都被克隆。默认情况下,自定义属性会被深度克隆。如果 deep 选项为 false,自定义属性将被浅克隆。如果 contents 选项为 false 且 contents 实例属性是 Buffer,则将重用该 Buffer 而不是克隆它。
inspect()string返回 Vinyl 对象的格式化解释。由 Node 的 console.log 自动调用。

规范化和拼接

所有路径属性都通过它们的设置器进行规范化。使用 / 拼接路径,而不是使用 path.join(),这样规范化将在所有平台上正确进行。永远不要用 \ 拼接 - 它在 POSIX 系统上是一个有效的文件名字符。

const file = new File();
file.path = '/' + 'test' + '/' + 'foo.bar';

console.log(file.path);
// posix => /test/foo.bar
// win32 => \\test\\foo.bar