|
- 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 完毕");
|