77 lines
3.1 KiB
JavaScript
77 lines
3.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const crypto = require('crypto');
|
|
|
|
const servers = [
|
|
{
|
|
code:"ja"
|
|
},
|
|
{
|
|
code:"en"
|
|
},
|
|
{
|
|
code:"ko"
|
|
}
|
|
];
|
|
function filesHashArr(dirName, extName, excludeName) {
|
|
const dirFiles = fs.readdirSync(dirName);
|
|
const hashArr = [];
|
|
for (let fileName of dirFiles) {
|
|
if (
|
|
typeof(extName) == "string" && path.extname(fileName) !== extName || //如果扩展名是字符串,不匹配则跳过
|
|
extName instanceof RegExp && !extName.test(path.extname(fileName)) || //如果扩展名是正则表达式,不匹配则跳过
|
|
Array.isArray(extName) && extName.every(ext=>path.extname(fileName) !== ext) //如果扩展名是数组,则多次匹配字符串,不匹配则跳过
|
|
) continue;
|
|
if (excludeName && (
|
|
typeof(excludeName) == "string" && fileName.includes(excludeName) || //如果文件名包含排除名则跳过
|
|
excludeName instanceof RegExp && excludeName.test(fileName) || //如果是正则表达式,匹配则跳过
|
|
Array.isArray(excludeName) && excludeName.some(exclude=>fileName.includes(exclude)) //如果扩展名是数组,则多次匹配字符串,不匹配则跳过
|
|
)) continue;
|
|
const fullFileName = path.join(dirName, fileName);
|
|
const file = fs.readFileSync(fullFileName);
|
|
const cardHash = crypto.createHash('md5');
|
|
cardHash.update(file);
|
|
const md5 = cardHash.digest('hex');
|
|
console.log(fullFileName, md5);
|
|
hashArr.push([fullFileName.replaceAll("\\", "\/"), md5]);
|
|
}
|
|
return hashArr;
|
|
}
|
|
const cachesArr = [];
|
|
for (let server of servers) {
|
|
const cardsHash = filesHashArr(`./images/cards_${server.code}`);
|
|
cachesArr.push(...cardsHash);
|
|
const voiceHash = filesHashArr(`./sound/voice/${server.code}`);
|
|
cachesArr.push(...voiceHash);
|
|
}
|
|
//字体
|
|
const fontsHash = filesHashArr("./fonts", /\.woff2?$/i);
|
|
cachesArr.push(...fontsHash);
|
|
//程序
|
|
const programHash = filesHashArr("./", /\.(js|html|css)$/i, ["package", "service-worker"]);
|
|
cachesArr.push(...programHash);
|
|
//语言
|
|
const lanuageHash = filesHashArr("./languages", /\.(js|css)$/i);
|
|
cachesArr.push(...lanuageHash);
|
|
//UI图片
|
|
const UiImageHash = filesHashArr("./images", /\.(png|webp|svg)$/i);
|
|
cachesArr.push(...UiImageHash);
|
|
//第三方库
|
|
const libraryHash = filesHashArr("./library", /\.js/i); //第三方库
|
|
cachesArr.push(...libraryHash);
|
|
const library_aaaHash = filesHashArr("./library/jy4340132-aaa", /\.(js|wasm)$/i); //播放语音的库
|
|
cachesArr.push(...library_aaaHash);
|
|
//数据
|
|
// const dataHash = filesHashArr("./monsters-info", /\.json$/i);
|
|
// cachesArr.push(...dataHash);
|
|
//文档
|
|
const docHash = filesHashArr("./doc", /\.html$/i);
|
|
cachesArr.push(...docHash);
|
|
const docImageHash = filesHashArr("./doc/images", /\.(png|webp|svg)$/i);
|
|
cachesArr.push(...docImageHash);
|
|
|
|
const swJs = fs.readFileSync('./service-worker.js', 'utf-8');
|
|
let formatterHashes = true;
|
|
const newSwJs = swJs.replace(/(const\s+cachesMap\s*=\s*)[\s\S]+?;/i, `$1new Map(${JSON.stringify(cachesArr, undefined, formatterHashes ? "\t" : undefined)});`);
|
|
fs.writeFileSync('./service-worker.js', newSwJs, 'utf-8');
|
|
console.log("更新 service-worker.js 完毕"); |