dest()#

建立一個流程,將 Vinyl 物件寫入檔案系統。

使用方法#

const { src, dest } = require('gulp');
function copy() {"}
返回 src'input/*.js'
.pipedest'output/';
}
exports.copy = copy

簽名#

destdirectory [options]

參數#

參數類型備註
directory
(必填)
字符串
功能
要將文件寫入的輸出目錄的路徑。如果使用函數,則將使用每個Vinyl對象調用函數,並且必須返回字符串目錄路徑。
選項對象在下面的選項中詳細說明。

返回值#

一個可以在流的中間或末端使用的流,用於在檔案系統中創建文件。每當 Vinyl 物件通過該流時,它將內容和其他詳細信息寫入給定目錄的檔案系統中。如果 Vinyl 物件具有 symlink 屬性,則將創建符號連結而不是寫入內容。文件創建後,其元數據將被更新以匹配 Vinyl 物件。

每當在檔案系統中創建文件時,將修改 Vinyl 物件。

  • cwdbasepath 屬性將被更新以匹配所創建的文件。
  • 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()將與任何相對路徑結合以形成絕對路徑的目錄。對於絕對路徑,將被忽略。用於避免將 directorypath.join() 結合。
模式數字
功能
Vinyl 物件的 stat.mode創建文件時使用的模式。如果未設置且缺少 stat.mode,則將改為使用進程的模式。
dirMode數字
功能
創建目錄時使用的模式。如果未設置,將改為使用進程的模式。
覆蓋布林值
功能
true當為 true 時,將使用相同路徑的現有文件進行覆蓋。
附加布林值
功能
錯誤若為真,則將內容添加到文件末尾,而不是替換現有內容。
來源映射布林值
字符串
功能
錯誤若為真,將內聯源映射寫入輸出文件。指定一個字串路徑將在給定路徑寫入外部源映射。
相對符號連結布林值
功能
錯誤若為假,則創建的任何符號連結將是絕對的。
注意:若正在創建連接點,則此選項將被忽略,因為它們必須是絕對的。
使用連接點布林值
功能
true此選項僅在Windows上相關,在其他地方則被忽略。若為真,則創建目錄符號連結作為連接點。在下方的《Windows上的符號連結》中有詳細說明。

元數據更新#

每當dest()流創建一個文件時,Vinyl對象的modemtimeatime將與創建的文件進行比較。如果它們不同,則將更新已創建的文件以反映Vinyl對象的元數據。如果這些屬性相同,或者gulp沒有權限進行更改,則嘗試將被默默地跳過。

此功能在Windows或其他不支援Node的process.getuid()process.geteuid()方法的操作系統上被禁用。這是由於Windows通過使用fs.fchmod()fs.futimes()產生意外結果。

注意fs.futimes()方法在內部將mtimeatime時間戳轉換為秒。這個除以1000的除法可能在32位操作系統上造成一些精度損失。

源映射#

源映射支持直接內置於src()dest()中,但默認情況下被禁用。啟用它以生成內聯或外部源映射。

內聯源映射

const { src, dest } = require('gulp');
const uglify = require('gulp-uglify');
src('input/**/*.js', { sourcemaps: true })
pipe(uglify())
pipe(dest('output/', { sourcemaps: true }));

外部 sourcemaps

const { src, dest } = require('gulp');
const uglify = require('gulp-uglify');
src('input/**/*.js', { sourcemaps: true })
pipe(uglify())
pipe(dest('output/', { 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'。如果您正在創建一個懸空連結到目錄,這可能會導致意外的行為。 避免這種情況。