使用 NodeJS 判断本地文件是否变更信息

发布于 2021-11-03 18:57:04 字数 2209 浏览 1147 评论 0

当我们在日常开发中需要上线压缩文件时,通常的做法是整个目录的全部压缩一遍。当项目很大或者入口很多的时候,压缩这个过程非常痛苦,尤其是 uglifyjs 的压缩大文件速度让人发指。

那么,如果想节约时间,最好的办法就是只压缩 合并后 有内容变更的文件。

这个实现起来很简单,原理不过就是字符串读来,然后 md5 一下,存到一个地方,下次再读 md5 的时候比对一下,有变化的既为变更文件。

我专门从自己的项目里抽出了一部分代码,写了个 package。主要代码实现如下:

/**
 * @author xiaojue
 * @email designsor@gmail.com
 * @fileoverview 获取路径下变化的文件列表
 */
var lithe = require('lithe');
var fs = require('fs');
var crypto = require('crypto');
var path = require('path');
var hfs = lithe.hfs;

function getMd5(p){
    var str = fs.readFileSync(p,'utf-8');
    var md5um = crypto.createHash('md5');
    md5um.update(str);
    return md5um.digest('hex');
}

function gcf(){
    this.database = path.join(process.cwd(),'./.gcf');
    if(!fs.existsSync(this.database)){
        hfs.writeFileSync(this.database,'{}','utf-8');  
    }
}

gcf.prototype = {
    constructor:gcf,
    get:function(p,filter){
        var self = this,
        base = fs.readFileSync(this.database),
        changedList = [],
        files;
        base = JSON.parse(base);
        hfs.walk(p,function(lists,a){
            files = lists;
            files.forEach(function(filepath){
                var md5str = getMd5(filepath);
                if(!base[filepath] || (base[filepath] && base[filepath] !== md5str)) changedList.push(filepath);
                base[filepath] = md5str;    
            });
            hfs.writeFileSync(self.database,JSON.stringify(base),'utf-8');
        },{
            filter:filter
        });
        return changedList;
    }
};

module.exports = new gcf();

使用起来也还不错,因为考虑到实际需求,全部都做成同步执行的了,没有什么异步复杂回调的担忧,本地保存了一个 .gcf 文件来记录每次的 md5 值,就酱紫。

var gcf = require('gcf');

var changed = gcf.get('./',function(item){
    if(item.match(/^node_modules|^\./)) return false;
    return true;
});

console.log(changed); // [];

这是使用方法,直接获取到变化文件列表数组。

https://github.com/xiaojue/getChangeFiles 是项目地址。

npm install gcf 

可一键安装

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

想挽留

暂无简介

0 文章
0 评论
20371 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文