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