gulp.dest()

2020-09-30 18:05 更新

gulp.dest()介紹

創(chuàng)建一個用于將 Vinyl 對象寫入到文件系統(tǒng)的流。

gulp.dest()用法

const { src, dest } = require('gulp');

function copy() {
  return src('input/*.js')
    .pipe(dest('output/'));
}

exports.copy = copy; 

gulp.dest()函數(shù)原型

dest(directory, [options])

參數(shù)

參數(shù)類型描述
directory
(required)
string
function
將寫入文件的輸出目錄的路徑。如果使用一個函數(shù),該函數(shù)將與每個 Vinyl 對象一起調用,并且必須返回一個字符串目錄路徑。
optionsobject詳情見下文選項。

返回值

返回一個可以在管道的中間或末尾使用的流,用于在文件系統(tǒng)上創(chuàng)建文件。

每當 Vinyl 對象通過流被傳遞時,它將內容和其他細節(jié)寫到給定目錄下的文件系統(tǒng)。如果 Vinyl 對象具有 symlink 屬性,將創(chuàng)建符號鏈接(symbolic link)而不是寫入內容。創(chuàng)建文件后,將更新其元數(shù)據(jù)以匹配 Vinyl 對象。

在文件系統(tǒng)上創(chuàng)建文件時,Vinyl 對象將被修改。

  • cwd、base 和 path 屬性將被更新以匹配創(chuàng)建的文件。
  • stat 屬性將被更新,以匹配文件系統(tǒng)上的文件。
  • 如果 contents 屬性是一個流,它將被重置,以便可以再次讀取。

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

當目錄為空字符串時,將拋出一個錯誤,并提示 "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 對象一起調用,并且必須返回另一個列出類型的值。

名稱類型默認值注解
cwdstring
function
process.cwd()這個目錄將與任何相對路徑相結合以形成絕對路徑。對于絕對路徑忽略。用于避免將 directory 與 path.join() 相結合。
modenumber
function
stat.mode of the Vinyl object創(chuàng)建文件時使用的模式。如果沒有設置,并且缺少 stat.mode,則使用 process' 模式。
dirModenumber
function
創(chuàng)建目錄時使用的模式。如果沒有設置,將使用 process' 模式。
overwriteboolean
function
true如果為 true,則用相同的路徑覆蓋現(xiàn)有文件。
appendboolean
function
false如果為 true,則將內容添加到文件末尾,而不是替換現(xiàn)有內容。
sourcemapsboolean
string
function
false如果為 true,則將內聯(lián) sourcemaps 寫入輸出文件。指定一個 string 路徑將在給定路徑上寫入外部 sourcemaps 。
relativeSymlinksboolean
function
false當為false 時,創(chuàng)建的任何符號鏈接將是絕對的。
注意: 如果正在創(chuàng)建連接,則忽略它們,因為它們必須是絕對的。
useJunctionsboolean
function
true此選項僅適用于 Windows,在其他地方被忽略。當為 true 時,創(chuàng)建目錄符號鏈接作為連接(junction)。詳情請見下文 Symbolic links on Windows

元數(shù)據(jù)更新

每當 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)的精度有所下降。

Sourcemaps

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: '.' }));

Symbolic links on Windows

在 Windows 上創(chuàng)建符號鏈接時,type 參數(shù)被傳遞給 Node 的 fs.symlink() 方法,該方法指定被鏈接的目標的類型。鏈接類型設置為:

  • 'file',當目標是一個常規(guī)文件時
  • 'junction', 當目標是一個目錄時
  • 'dir', 當目標是一個目錄并且用戶禁用了 useJunctions 選項時

如果試圖創(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 鏈接,這可能會導致意外行為。避免這種情況。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號