Vinyl

2020-09-30 18:07 更新

Vinyl介紹

虛擬的文件格式。當 src() 讀取文件時,將生成一個 Vinyl 對象來表示文件——包括路徑、內容和其他元數據。

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

當創(chuàng)建您自己的 Vinyl 對象時——而不是使用 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函數原型

new Vinyl([options])

參數

參數類型描述
optionsobject詳情請參加下文 選項。

返回值

返回一個 Vinyl 類的實例,表示一個單獨的虛擬文件,詳見下面的 Vinyl 實例。

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

當傳遞的任何選項都不符合表中定義的實例屬性定義(如 path 被設置為一個數字)時拋出錯誤。

選項

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

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

const Vinyl = require('vinyl');

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

Vinyl 實例

每個 Vinyl 對象實例都具有訪問和/或修改虛擬文件信息的屬性和方法。

實例屬性

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

屬性類型描述拋出錯誤
contentsReadableStream
Buffer
null
獲取和設置虛擬文件的內容。如果將其設置為 ReadableStream,它將被包裝在一個 可克隆可讀的 流中。如果設置為 ReadableStream, Buffer,或者 null 之外的任何值
statobject獲取或設置 fs.Stats 的實例。當確定 Vinyl 對象是否表示目錄或符號鏈接時使用。
cwdstring獲取并設置當前工作目錄。用于推導相對路徑。如果設置為空字符串或任何非字符串值。
basestring獲取和設置基目錄。用于計算 relative 實例屬性。 在由 src() 生成的 Vinyl 對象上,將設置為 [glob base][global -base-concepts]。如果設置為 null 或 undefined,則會退到 cwd 實例屬性的值。如果設置為空字符串或任何非字符串值(null 或 undefined 除外)。
pathstring獲取和設置完整的絕對文件路徑。設置為與當前 path 不同的值會將新路徑附加到 history 實例屬性中。如果設置為任何非字符串值。
historyarray已分配的 Vinyl 對象的所有 path 值的數組。第一個元素是原始路徑,最后一個元素是當前路徑。此屬性及其元素應被視為只讀,僅通過設置 path實例屬性間接更改。
relativestring獲取 base 和 path 實例屬性之間的相對路徑段。如果設置為任何值。如果在 path 不可用時訪問。
dirnamestring獲取和設置 path 實例屬性的目錄。如果在 path 不可用時訪問
stemstring獲取并設置 path 實例屬性的 stem(沒有擴展的文件名)。如果在 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 時, 實例被認為是 symbolic。 這假設 Vinyl 對象是用一個有效的(或適當模擬的) fs.Stats 對象構造的。
clone([options])objectA new Vinyl object with all properties cloned. 一個使用所有屬性克隆出的新的 Vinyl 對象。 默認情況下,自定義屬性是深拷貝。如果 deep 選項為 false,自定義屬性將被淺拷貝。如果 contents 選項設置為 fasle 并且 contents 屬性是一個 Buffer,那么這個 Buffer 將被復用,而不是克隆。
inspect()string返回 Vinyl 對象的格式化說明。由 Node 的 console.log 自動調用。

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

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

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

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


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號