您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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ù):
stream 文件通過對比后將sourceFile添加到隊列中
callback 函數(shù)里的代碼執(zhí)行完畢后的回調(diào)函數(shù)
sourceFile vinyl 文件對象
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)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。