創(chuàng)建一個用于將 Vinyl 對象寫入到文件系統(tǒng)的流。
const { src, dest } = require('gulp');
function copy() {
return src('input/*.js')
.pipe(dest('output/'));
}
exports.copy = copy;
dest(directory, [options])
參數(shù) | 類型 | 描述 |
---|---|---|
directory (required) | string function | 將寫入文件的輸出目錄的路徑。如果使用一個函數(shù),該函數(shù)將與每個 Vinyl 對象一起調用,并且必須返回一個字符串目錄路徑。 |
options | object | 詳情見下文選項。 |
返回一個可以在管道的中間或末尾使用的流,用于在文件系統(tǒng)上創(chuàng)建文件。
每當 Vinyl 對象通過流被傳遞時,它將內容和其他細節(jié)寫到給定目錄下的文件系統(tǒng)。如果 Vinyl 對象具有 symlink 屬性,將創(chuàng)建符號鏈接(symbolic link)而不是寫入內容。創(chuàng)建文件后,將更新其元數(shù)據(jù)以匹配 Vinyl 對象。
在文件系統(tǒng)上創(chuàng)建文件時,Vinyl 對象將被修改。
當目錄為空字符串時,將拋出一個錯誤,并提示 "Invalid dest() folder argument. Please specify a non-empty string or a function."(無效的 dest() 文件夾參數(shù)。請指定非空字符串或函數(shù)。)
當目錄不是字符串或函數(shù)時,將拋出一個錯誤,并提示 "Invalid dest() folder argument. Please specify a non-empty string or a function."
當 directory 是一個返回空字符串或 undefined 的函數(shù)時,將發(fā)出一條錯誤消息 “Invalid output folder”。
對于接受函數(shù)的選項,傳遞的函數(shù)將與每個 Vinyl 對象一起調用,并且必須返回另一個列出類型的值。
名稱 | 類型 | 默認值 | 注解 |
---|---|---|---|
cwd | string function | process.cwd() | 這個目錄將與任何相對路徑相結合以形成絕對路徑。對于絕對路徑忽略。用于避免將 directory 與 path.join() 相結合。 |
mode | number function | stat.mode of the Vinyl object | 創(chuàng)建文件時使用的模式。如果沒有設置,并且缺少 stat.mode ,則使用 process' 模式。 |
dirMode | number function | 創(chuàng)建目錄時使用的模式。如果沒有設置,將使用 process' 模式。 | |
overwrite | boolean function | true | 如果為 true,則用相同的路徑覆蓋現(xiàn)有文件。 |
append | boolean function | false | 如果為 true,則將內容添加到文件末尾,而不是替換現(xiàn)有內容。 |
sourcemaps | boolean string function | false | 如果為 true,則將內聯(lián) sourcemaps 寫入輸出文件。指定一個 string 路徑將在給定路徑上寫入外部 sourcemaps 。 |
relativeSymlinks | boolean function | false | 當為false 時,創(chuàng)建的任何符號鏈接將是絕對的。 注意: 如果正在創(chuàng)建連接,則忽略它們,因為它們必須是絕對的。 |
useJunctions | boolean function | true | 此選項僅適用于 Windows,在其他地方被忽略。當為 true 時,創(chuàng)建目錄符號鏈接作為連接(junction)。詳情請見下文 Symbolic links on Windows |
每當 dest() 流創(chuàng)建一個文件時,就會將 Vinyl 對象的 mode、mtime 和 atime 與創(chuàng)建的文件進行比較。如果它們不同,創(chuàng)建的文件將被更新以反映 Vinyl 對象的元數(shù)據(jù)。如果這些屬性相同,或者 gulp 沒有更改的權限,則會跳過該嘗試。
在不支持 Node 的 process.getuid()或 process.geteuid() 方法的 Windows 或其他操作系統(tǒng)上禁用此功能。這是因為Windows通過使用 fs.fchmod() 和 `fs.futimes() 會產(chǎn)生意想不到的結果。
注意: fs.futimes() 在內部將 mtime 和 atime 時間戳轉換為秒。這種除以 1000 的方法可能會導致 32 位操作系統(tǒng)的精度有所下降。
Sourcemap 支持直接構建到 src() 和 dest() 中,但默認情況下是禁用的。使其能夠生成內聯(lián)或外部 sourcemaps。
內聯(lián) sourcemaps:
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 上創(chuàng)建符號鏈接時,type 參數(shù)被傳遞給 Node 的 fs.symlink() 方法,該方法指定被鏈接的目標的類型。鏈接類型設置為:
如果試圖創(chuàng)建 dangling (指向不存在的目標)鏈接,則無法自動確定鏈接類型。在這些情況下,根據(jù) dangling 鏈接是通過 symlink() 創(chuàng)建的還是通過 dest() 創(chuàng)建的,行為會有所不同。
對于通過 symlink() 創(chuàng)建的 dangling 鏈接,傳入的 Vinyl 對象表示目標,因此其 stats 將確定所需的鏈接類型。如果 isDirectory() 返回 false,則創(chuàng)建一個 'file' 鏈接,否則根據(jù) useJunctions 選項的值創(chuàng)建一個 'junction' 或 'dir' 鏈接。
對于通過 dest() 創(chuàng)建的 dangling 鏈接,傳入的 Vinyl 對象表示鏈接——通常通過 src(..., { resolveSymlinks: false }) 從磁盤加載。在這種情況下,無法合理地確定鏈接類型,默認使用 'file'。如果正在創(chuàng)建指向目錄的 dangling 鏈接,這可能會導致意外行為。避免這種情況。
更多建議: