javascript - 如何选择最新的文件?
问题描述
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 样式路径,因此我glob
在本地 package.json 中安装了 npm 包
然后我所做的是,使用 获取所有文件glob( path, callback )
,根据最后修改的使用过滤这些文件fs.stat
和mtime
ormtimeMs
并且只保留最后一个
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 );
})
});
});
推荐阅读
- javascript - 如何从 gl-matrix.js 正确导入?
- json - shell 脚本解析问题:意外的 INVALID_CHARACTER(Windows cmd shell 引用问题?)
- debugging - Rider 是否具有“仅我的代码”调试选项?
- python - 如何读取多个 csv 文件中的行,存储它们,然后在不使用模块的情况下搜索它们?
- powershell - 杀死父进程后是否需要额外的运行空间清理?
- javascript - 在 Java servlet 中成功下载 excel 文件后如何给出警告消息?
- javascript - 标题的自定义工具提示 CSS 问题
- node.js - 表单操作提交到节点服务器后无法重定向页面。(反应前)
- android - 如何在不处理的情况下停止观察旧的 RxJava 响应状态?
- swift - 没有这样的模块 RealmSwift