const fs = require('fs'); const path = require('path'); // 定义要替换的目录 const srcDir = path.join(__dirname, 'src'); // 定义要搜索的文件扩展名 const fileExtensions = ['.ts', '.html']; // 替换 via.placeholder.com 链接的函数 function replacePlaceholderLinks(fileContent, filePath) { let modifiedContent = fileContent; let replacementCount = 0; // 正则表达式匹配 via.placeholder.com 链接 const placeholderRegex = /https:\/\/via\.placeholder\.com\/(\d+)x(\d+)\/([0-9A-Fa-f]+)\/([0-9A-Fa-f]+)\?text=([^"']*)/g; // 替换匹配的链接 modifiedContent = modifiedContent.replace(placeholderRegex, (match, width, height, bgColor, textColor, text) => { replacementCount++; // 根据文件类型和上下文决定返回什么 if (filePath.endsWith('.html')) { // 对于HTML文件,返回一个带有内联样式的div作为占位图 return `
${text}
`; } else if (filePath.endsWith('.ts')) { // 对于TypeScript文件,返回一个本地占位图配置对象 return `{ width: ${width}, height: ${height}, bgColor: '#${bgColor}', textColor: '#${textColor}', text: '${text}' }`; } // 如果不是HTML或TS文件,保持原样 return match; }); return { modifiedContent, replacementCount }; } // 遍历目录中的文件 function traverseDirectory(dir) { const files = fs.readdirSync(dir); let totalReplacements = 0; files.forEach(file => { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { const subDirReplacements = traverseDirectory(filePath); totalReplacements += subDirReplacements; } else if (fileExtensions.some(ext => file.endsWith(ext))) { // 读取文件内容 const fileContent = fs.readFileSync(filePath, 'utf8'); // 替换 via.placeholder.com 链接 const { modifiedContent, replacementCount } = replacePlaceholderLinks(fileContent, filePath); // 如果有替换,写入文件 if (replacementCount > 0) { fs.writeFileSync(filePath, modifiedContent, 'utf8'); console.log(`已替换 ${filePath} 中的 ${replacementCount} 个placeholder链接`); totalReplacements += replacementCount; } } }); return totalReplacements; } // 执行替换操作 console.log('开始替换 via.placeholder.com 链接...'); const totalReplacements = traverseDirectory(srcDir); console.log(`替换完成!总共替换了 ${totalReplacements} 个placeholder链接。`);