#
dest()建立一個流程,將 Vinyl 物件寫入檔案系統。
#
使用方法#
簽名#
參數參數 | 類型 | 備註 |
---|---|---|
directory (必填) | 字符串 功能 | 要將文件寫入的輸出目錄的路徑。如果使用函數,則將使用每個Vinyl對象調用函數,並且必須返回字符串目錄路徑。 |
選項 | 對象 | 在下面的選項中詳細說明。 |
#
返回值一個可以在流的中間或末端使用的流,用於在檔案系統中創建文件。每當 Vinyl 物件通過該流時,它將內容和其他詳細信息寫入給定目錄的檔案系統中。如果 Vinyl 物件具有 symlink
屬性,則將創建符號連結而不是寫入內容。文件創建後,其元數據將被更新以匹配 Vinyl 物件。
每當在檔案系統中創建文件時,將修改 Vinyl 物件。
cwd
、base
和path
屬性將被更新以匹配所創建的文件。stat
屬性將被更新以匹配檔案系統中的文件。- 如果
contents
屬性是一個流,則將其重置,以便可以再次讀取。
#
錯誤當 directory
是空字符串時,將拋出一個帶有消息 "Invalid dest() folder argument. Please specify a non-empty string or a function." 的錯誤。
當 directory
不是字符串或函數時,將拋出一個帶有消息 "Invalid dest() folder argument. Please specify a non-empty string or a function." 的錯誤。
當 directory
是返回空字符串或 undefined
的函數時,將發出帶有消息 "Invalid output folder" 的錯誤。
#
選項對於接受函數的選項,將使用每個 Vinyl 物件調用傳遞的函數,並必須返回另一個列出類型的值。
名稱 | 類型 | 默認值 | 備註 |
---|---|---|---|
cwd | 字符串 功能 | process.cwd() | 將與任何相對路徑結合以形成絕對路徑的目錄。對於絕對路徑,將被忽略。用於避免將 directory 與 path.join() 結合。 |
模式 | 數字 功能 | Vinyl 物件的 stat.mode | 創建文件時使用的模式。如果未設置且缺少 stat.mode ,則將改為使用進程的模式。 |
dirMode | 數字 功能 | 創建目錄時使用的模式。如果未設置,將改為使用進程的模式。 | |
覆蓋 | 布林值 功能 | true | 當為 true 時,將使用相同路徑的現有文件進行覆蓋。 |
附加 | 布林值 功能 | 錯誤 | 若為真,則將內容添加到文件末尾,而不是替換現有內容。 |
來源映射 | 布林值 字符串 功能 | 錯誤 | 若為真,將內聯源映射寫入輸出文件。指定一個字串路徑將在給定路徑寫入外部源映射。 |
相對符號連結 | 布林值 功能 | 錯誤 | 若為假,則創建的任何符號連結將是絕對的。 注意:若正在創建連接點,則此選項將被忽略,因為它們必須是絕對的。 |
使用連接點 | 布林值 功能 | true | 此選項僅在Windows上相關,在其他地方則被忽略。若為真,則創建目錄符號連結作為連接點。在下方的《Windows上的符號連結》中有詳細說明。 |
#
元數據更新每當dest()
流創建一個文件時,Vinyl對象的mode
、mtime
和atime
將與創建的文件進行比較。如果它們不同,則將更新已創建的文件以反映Vinyl對象的元數據。如果這些屬性相同,或者gulp沒有權限進行更改,則嘗試將被默默地跳過。
此功能在Windows或其他不支援Node的process.getuid()
或process.geteuid()
方法的操作系統上被禁用。這是由於Windows通過使用fs.fchmod()
和fs.futimes()
產生意外結果。
注意:fs.futimes()
方法在內部將mtime
和atime
時間戳轉換為秒。這個除以1000的除法可能在32位操作系統上造成一些精度損失。
#
源映射源映射支持直接內置於src()
和dest()
中,但默認情況下被禁用。啟用它以生成內聯或外部源映射。
內聯源映射
外部 sourcemaps
#
Windows 上的符號連結在 Windows 上創建符號連結時,將一個 type
參數傳遞給 Node 的 fs.symlink()
方法,該參數指定被連結的目標的類型。連結類型設置為
- 當目標是一個常規文件時,
'file'
- 當目標是一個目錄時,
'junction'
- 當目標是一個目錄並且用戶禁用了
useJunctions
選項時,'dir'
如果嘗試創建一個懸空的(指向不存在的目標)連結,則無法自動確定連結類型。在這些情況下,行為將取決於懸空連結是通過 symlink()
還是通過 dest()
創建的。
對於通過 symlink()
創建的懸空連結,傳入的 Vinyl 對象代表目標,因此其統計信息將確定所需的連結類型。如果 isDirectory()
返回 false,則創建一個 'file'
連結,否則,根據 useJunctions
選項的值,創建一個 'junction'
或 'dir'
連結。
對於通過 dest()
創建的懸空連結,傳入的 Vinyl 對象代表連結 - 通常通過 src(..., { resolveSymlinks: false })
從磁盤加載。在這種情況下,無法合理確定連結類型,並且默認使用 'file'
。如果您正在創建一個懸空連結到目錄,這可能會導致意外的行為。 避免這種情況。