-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcache.js
40 lines (38 loc) · 1.32 KB
/
cache.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const fs = require('fs-extra');
const path = require('path');
const md5Hex = require('md5-hex');
const packageConfig = require('./package.json');
const os = require('os');
class Cache {
constructor(options){
this.options = {
directory: path.join(os.tmpdir(), packageConfig.name + '-cache'), // 缓存存放的目录
};
this.setOptions(options);
}
setOptions(options){
this.options = Object.assign({}, this.options, options || {});
// 创建缓存存放目录
fs.ensureDirSync(this.options.directory);
}
has(file){
const filename = md5Hex(file.contents);
return fs.readdirSync(this.options.directory).indexOf(filename) !== -1;
}
get(file){
const filename = md5Hex(file.contents);
const filepath = path.join(this.options.directory, filename);
const compressed = fs.readFileSync(filepath, {encoding: null});
if (compressed) {
file.contents = compressed;
}
return file;
}
set(file, compressed){
// 缓存写入硬盘
const filename = md5Hex(file.contents);
const filepath = path.join(this.options.directory, filename);
fs.outputFileSync(filepath, compressed.contents, {encoding: null});
}
}
module.exports = new Cache();