国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

簡單談談gulp-changed插件

2019-11-19 17:28:43
字體:
來源:轉載
供稿:網友

前言

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

根據官方給出的例子:

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文件夾中,然后繼續進行后續的操作。在這之前,我寫的代碼是這樣子的,沒有傳入參數,也沒有輸出到某文件夾中(gulp.dest(DEST) ):

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

然后發現,每次執行時,所有的文件都會通過管道,根本沒有過濾的作用。看了源代碼之后才知道,傳遞參數和文件輸出是必須的,因為程序里是拿兩個文件夾SRC和DEST里的文件進行對比的。

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

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

可通過傳遞參數修改比對函數:

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

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

  1. stream 文件通過對比后將sourceFile添加到隊列中
  2. callback 函數里的代碼執行完畢后的回調函數
  3. sourceFile vinyl 文件對象
  4. destPath 與sourceFile文件對比的目標文件路徑

源碼講解

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

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

這里有個疑問的地方:

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

mtime, atime, ctime

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

ATIME-ACCESS TIME

該字段表示文件中的數據最后一次被訪問的時間

主站蜘蛛池模板: 巨野县| 望城县| 沭阳县| 石屏县| 彰武县| 松桃| 团风县| 鄂托克旗| 扶风县| 综艺| 炎陵县| 浠水县| 明水县| 香港| 朔州市| 泸州市| 霞浦县| 岚皋县| 永城市| 巫山县| 安义县| 新绛县| 永川市| 德江县| 墨玉县| 河东区| 温州市| 同仁县| 清水河县| 迁西县| 冀州市| 哈巴河县| 五原县| 乌鲁木齐市| 永城市| 类乌齐县| 淅川县| 错那县| 曲麻莱县| 庐江县| 龙江县|