溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

gulp-changed插件有什么用

發(fā)布時間:2021-08-19 09:40:17 來源:億速云 閱讀:105 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細講解有關gulp-changed插件有什么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

前言

gulp-changed插件的作用,是用來過濾未被修改過的文件,只有修改后的文件才能通過管道。這樣做的好處時,只處理修改后的文件,減少后續(xù)程序的執(zhí)行時間。

根據(jù)官方給出的例子:

const SRC = 'src/*.js';
const DEST = 'dist';

gulp.task('default', () => {
 return gulp.src(SRC)
  .pipe(changed(DEST))
  .pipe(gulp.dest(DEST))
  .pipe( /* 其他操作 */ );
});

檢測SRC中的文件,然后把從changed()通過的文件輸出到DEST文件夾中,然后繼續(xù)進行后續(xù)的操作。在這之前,我寫的代碼是這樣子的,沒有傳入?yún)?shù),也沒有輸出到某文件夾中(gulp.dest(DEST) ):

gulp.task('default', () => {
 return gulp.src('src/*.js')
  .pipe(changed())
  .pipe( /* 其他操作 */ );
});

然后發(fā)現(xiàn),每次執(zhí)行時,所有的文件都會通過管道,根本沒有過濾的作用??戳嗽创a之后才知道,傳遞參數(shù)和文件輸出是必須的,因為程序里是拿兩個文件夾SRC和DEST里的文件進行對比的。

每當檢測一個程序時,都會去DEST里的文件夾里尋找這個對應的文件,若DEST最后修改時間發(fā)生變化或內(nèi)容已更新,則表明這是一個新文件,通過管道,否則保留。程序里目前使用的是兩個文件最后修改時間的對比,若SRC里的文件的最后修改時間比DEST里文件的最后修改時間要大,說明該文件被修改過。

當然,gulp-changed還提供了一種比較函數(shù):內(nèi)容的對比。將源文件和目標文件的內(nèi)容進行sha1加密后,比較兩者的加密串,若不相同,則通過管道。

可通過傳遞參數(shù)修改比對函數(shù):

gulp.task('default', () => {
 return gulp.src(SRC)
  .pipe(changed(DEST, {hasChanged: changed.compareSha1Digest}))
  .pipe(gulp.dest(DEST))
  .pipe( /* 其他操作 */ );
});

當然,你可以傳遞自己定義的函數(shù),但是需支持以下4個參數(shù):

  1. stream 文件通過對比后將sourceFile添加到隊列中

  2. callback 函數(shù)里的代碼執(zhí)行完畢后的回調(diào)函數(shù)

  3. sourceFile vinyl 文件對象

  4. destPath 與sourceFile文件對比的目標文件路徑

源碼講解

這個方法里,是對兩個文件最后修改時間的對比

function compareLastModifiedTime(stream, cb, sourceFile, targetPath) {
 // 獲取目標文件的狀態(tài)
 fs.stat(targetPath, function (err, targetStat) {
 // 若源文件存在
 if (!fsOperationFailed(stream, sourceFile, err)) {
 // 對比兩者的最后修改時間
 if (sourceFile.stat.mtime > targetStat.mtime) {
 stream.push(sourceFile);
 }
 }
 cb();
 });
}

這里有個疑問的地方:

  • 若目標文件不存在,則當前情況是無法進行比較的,只能在運行一次之后,產(chǎn)生了目標文件;再修改源文件才能進行對比;新添加的文件同理

mtime, atime, ctime

上面中的mtime表示修改時間,此外,文件還幾個跟時間有關的屬性,這里也稍微的講解一下。

ATIME-ACCESS TIME

該字段表示文件中的數(shù)據(jù)最后一次被訪問的時間–通過unix進行直接讀取或通過命令行和腳本讀取。

CTIME-CHANGE TIME

當您更改文件的所有權或訪問權限時,ctime也隨之變化。當然,內(nèi)容更新時,ctime也會發(fā)生改變。

MTIME-MODIFY TIME

最后修改時間顯示上次更改文件內(nèi)容的時間。它不與文件權限的變化而變化,并因此用于跟蹤文件內(nèi)容的實際變化。

通過LS顯示這三種時間

最簡單的確認這些時間的方式是使用ls命令,我現(xiàn)在用的是windows系統(tǒng),安裝了一個ConEmu。

使用ls -l顯示的時間就是當前文件最后一次修改的時間,即mtime:

-rw-r--r-- 1 root 1049089   2676 一月 20 03:06 gulpfile.js

使用ls -lu顯示的是文件最后一次被訪問的時間,即atime:

-rw-r--r-- 1 root 1049089   2676 十一 24 09:18 gulpfile.js

使用ls -lc顯示的是文件最后一次權限被修改的時間,即ctime:

-rw-r--r-- 1 root 1049089   2676 一月 20 03:06 gulpfile.js

通過STAT顯示這三種時間

使用stat命令可以顯示這個文件更加詳細的信息:

$ stat gulpfile.js
 File: ‘gulpfile.js'
 Size: 2676   Blocks: 4   IO Block: 65536 regular file
Device: d6be5777h/3602798455d Inode: 844424930178810 Links: 1
Access: (0644/-rw-r--r--) Uid: (1435492/root) Gid: (1049089/ UNKNOWN)
Access: 2015-11-24 09:18:34.008292400 +0000
Modify: 2016-01-20 03:06:34.035859700 +0000
Change: 2016-01-20 07:04:40.432046400 +0000
 Birth: 2015-11-24 09:18:33.965292400 +0000

關于“gulp-changed插件有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI