簡體   English   中英

如何選擇最新的文件?

[英]How to select the most recent file?

我需要在每個子目錄中使用src獲取最新文件。

這是我的任務:

gulp.task('compile', function() {
  return gulp.src('src/jade/**/*.js')
    .pipe(jade({pretty: true}))
    .pipe(gulp.dest('dist'));
});

有沒有辦法讓gulp src獲得最新鮮的JS?

好吧,到目前為止沒有真正使用gulp,你應該做的是:

  • 找到您要編譯的所有文件
  • 將它們發送到src方法(它接受一個字符串,或一個文件數組或一個流)

我的一個問題是如何處理glob樣式路徑,所以為此我在我的本地package.json中安裝了glob npm包。

我接下來做的是,使用glob( path, callback )獲取所有文件glob( path, callback )使用fs.statmtimemtimeMs根據上次修改過濾那些mtimeMs並僅保留最后一個

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

async function getFileLastModifiedBy( file ) {
  return new Promise( (resolve, reject) => {
    fs.stat( file, (err, stats) => {
      if (err) {
        reject( err );
        return;
      }
      resolve( stats.mtimeMs );
    });
  } );
}

async function filterByNewest( input ) {
  const filesByModifiedBy = {};
  for (let file of input) {
    let directory = path.dirname( file );
    let lastModifiedBy = await getFileLastModifiedBy( file );
    if (!filesByModifiedBy[directory] || filesByModifiedBy[directory].lastModifiedBy < lastModifiedBy) {
      filesByModifiedBy[directory] = { file, lastModifiedBy };
    }
  }
  return Object.values( filesByModifiedBy ).map( v => v.file );
}

然后您可以將其與當前工作流程集成,如下所示

gulp.task('compile', function() {
  return new Promise( (resolve, reject) => {
    glob('src/jade/**/*.js', async function( err, files ) {
      if ( files ) {
        const newest = await filterByNewest( files );
        resolve( 
          src( newest )
            .pipe(jade({pretty: true}))
            .pipe(dest('dist'))
        );
        return;
      }
      reject( err );
    })
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM