Vinyl

2020-09-30 18:07 更新

Vinyl介紹

虛擬的文件格式。當(dāng) src() 讀取文件時(shí),將生成一個(gè) Vinyl 對(duì)象來(lái)表示文件——包括路徑、內(nèi)容和其他元數(shù)據(jù)。

Vinyl 對(duì)象可以使用插件進(jìn)行轉(zhuǎn)換。還可以使用 dest() 將它們持久化到文件系統(tǒng)。

當(dāng)創(chuàng)建您自己的 Vinyl 對(duì)象時(shí)——而不是使用 src() 生成——使用外部 vinyl 模塊,如下面的用法所示。

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/file.js'; 

Vinyl函數(shù)原型

new Vinyl([options])

參數(shù)

參數(shù)類(lèi)型描述
optionsobject詳情請(qǐng)參加下文 選項(xiàng)。

返回值

返回一個(gè) Vinyl 類(lèi)的實(shí)例,表示一個(gè)單獨(dú)的虛擬文件,詳見(jiàn)下面的 Vinyl 實(shí)例。

可能出現(xiàn)的錯(cuò)誤

當(dāng)傳遞的任何選項(xiàng)都不符合表中定義的實(shí)例屬性定義(如 path 被設(shè)置為一個(gè)數(shù)字)時(shí)拋出錯(cuò)誤。

選項(xiàng)

nametypedefaultnote
cwdstringprocess.cwd()將從中推導(dǎo)相對(duì)路徑的目錄。將被規(guī)范化,并刪除尾隨分隔符。
basestring用于計(jì)算 relative 實(shí)例屬性。 如果沒(méi)有設(shè)置,則回退到 cwd 的值。通常設(shè)置為 glob base。將被規(guī)范化,并刪除尾隨分隔符。
pathstring完整的絕對(duì)文件路徑。將被規(guī)范化,并刪除尾隨分隔符。
historyarray[ ]預(yù)先填充 Vinyl 實(shí)例的 history 的路徑數(shù)組。通常來(lái)自于從以前的 Vinyl 對(duì)象派生出一個(gè)新的 Vinyl 對(duì)象。如果 path 和 history 都被傳遞,path 將被附加到 history 中。每一項(xiàng)都將被規(guī)范化,并刪除尾隨分隔符。
statobject一個(gè) fs.Stats 實(shí)例,通常是對(duì)文件調(diào)用 fs.stat() 的結(jié)果。用于確定 Vinyl 對(duì)象是否表示目錄或符號(hào)鏈接。
contentsReadableStream
Buffer
null
null文件的內(nèi)容。如果 contents 是一個(gè) ReadableStream,它將被包裝在一個(gè) 可克隆可讀的 流中。

options 上的任何其他屬性都將直接分配給 Vinyl 實(shí)例。

const Vinyl = require('vinyl');

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

Vinyl 實(shí)例

每個(gè) Vinyl 對(duì)象實(shí)例都具有訪問(wèn)和/或修改虛擬文件信息的屬性和方法。

實(shí)例屬性

所有內(nèi)部管理的路徑——除了 contents 和 stat 之外的任何實(shí)例屬性——都被規(guī)范化,并刪除了末尾分隔符。有關(guān)更多信息,請(qǐng)參見(jiàn)規(guī)范化和連接。

屬性類(lèi)型描述拋出錯(cuò)誤
contentsReadableStream
Buffer
null
獲取和設(shè)置虛擬文件的內(nèi)容。如果將其設(shè)置為 ReadableStream,它將被包裝在一個(gè) 可克隆可讀的 流中。如果設(shè)置為 ReadableStream, Buffer,或者 null 之外的任何值
statobject獲取或設(shè)置 fs.Stats 的實(shí)例。當(dāng)確定 Vinyl 對(duì)象是否表示目錄或符號(hào)鏈接時(shí)使用。
cwdstring獲取并設(shè)置當(dāng)前工作目錄。用于推導(dǎo)相對(duì)路徑。如果設(shè)置為空字符串或任何非字符串值。
basestring獲取和設(shè)置基目錄。用于計(jì)算 relative 實(shí)例屬性。 在由 src() 生成的 Vinyl 對(duì)象上,將設(shè)置為 [glob base][global -base-concepts]。如果設(shè)置為 null 或 undefined,則會(huì)退到 cwd 實(shí)例屬性的值。如果設(shè)置為空字符串或任何非字符串值(null 或 undefined 除外)。
pathstring獲取和設(shè)置完整的絕對(duì)文件路徑。設(shè)置為與當(dāng)前 path 不同的值會(huì)將新路徑附加到 history 實(shí)例屬性中。如果設(shè)置為任何非字符串值。
historyarray已分配的 Vinyl 對(duì)象的所有 path 值的數(shù)組。第一個(gè)元素是原始路徑,最后一個(gè)元素是當(dāng)前路徑。此屬性及其元素應(yīng)被視為只讀,僅通過(guò)設(shè)置 path實(shí)例屬性間接更改。
relativestring獲取 base 和 path 實(shí)例屬性之間的相對(duì)路徑段。如果設(shè)置為任何值。如果在 path 不可用時(shí)訪問(wèn)。
dirnamestring獲取和設(shè)置 path 實(shí)例屬性的目錄。如果在 path 不可用時(shí)訪問(wèn)
stemstring獲取并設(shè)置 path 實(shí)例屬性的 stem(沒(méi)有擴(kuò)展的文件名)。如果在 path 不可用時(shí)訪問(wèn)
extnamestring獲取并設(shè)置 path 實(shí)例屬性的擴(kuò)展名。如果在 path 不可用時(shí)訪問(wèn)
basenamestring獲取和設(shè)置 path 實(shí)例屬性的文件名(stem + extname)。如果在 path 不可用時(shí)訪問(wèn)
symlinkstring獲取和設(shè)置符號(hào)鏈接的引用路徑。如果設(shè)置為任何非字符串值。

實(shí)例方法

方法返回值類(lèi)型返回值
isBuffer()boolean如果 contents 實(shí)例屬性是一個(gè) Buffer,則返回 true。
isStream()boolean如果 contents 實(shí)例屬性是一個(gè) Stream,則返回 true。
isNull()boolean如果 contents 實(shí)例屬性為 null,則返回 true。
isDirectory()boolean如果實(shí)例表示一個(gè)目錄,則返回 true。當(dāng) isNull() 返回 true,stat 實(shí)例屬性是一個(gè)對(duì)象,并且 stat.isDirectory() 返回 true 時(shí),實(shí)例被認(rèn)為是一個(gè)目錄。這假設(shè) Vinyl 對(duì)象是用一個(gè)有效的(或適當(dāng)模擬的) fs.Stats 對(duì)象構(gòu)造的。
isSymbolic()boolean如果實(shí)例表示符號(hào)鏈接,則返回 true。 當(dāng) isNull() 返回 true,stat 實(shí)例屬性是一個(gè)對(duì)象,并且 stat.isSymbolicLink() 返回 true 時(shí), 實(shí)例被認(rèn)為是 symbolic。 這假設(shè) Vinyl 對(duì)象是用一個(gè)有效的(或適當(dāng)模擬的) fs.Stats 對(duì)象構(gòu)造的。
clone([options])objectA new Vinyl object with all properties cloned. 一個(gè)使用所有屬性克隆出的新的 Vinyl 對(duì)象。 默認(rèn)情況下,自定義屬性是深拷貝。如果 deep 選項(xiàng)為 false,自定義屬性將被淺拷貝。如果 contents 選項(xiàng)設(shè)置為 fasle 并且 contents 屬性是一個(gè) Buffer,那么這個(gè) Buffer 將被復(fù)用,而不是克隆。
inspect()string返回 Vinyl 對(duì)象的格式化說(shuō)明。由 Node 的 console.log 自動(dòng)調(diào)用。

路徑規(guī)范化和連接

所有路徑屬性都由它們的 setter 進(jìn)行規(guī)范化。使用 / 連接路徑,而不是使用 path.join(),這樣就可以在所有平臺(tái)上正確地進(jìn)行規(guī)范化。永遠(yuǎn)不要使用 \ 連接。( \ 是 POSIX 系統(tǒng)上的一個(gè)有效文件名字符。)

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

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)