Ну, если бы вы до сих пор не использовали gulp, то вы должны сделать что-то вроде:
- Найдите все файлы, которые вы хотите скомпилировать
- отправить их в метод
src
(который принимает строку, массив файлов или поток)
Одной из моих проблем было то, как обрабатывать путь в стиле glob, поэтому для этого я установил пакет glob
npm в свой локальный пакет. Json
Затем я получил все файлы, используя glob( path, callback )
, отфильтровал их в соответствии с последними изменениями, используя fs.stat
и mtime
или 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 );
})
});
});