app3.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const fs = require('fs')
  2. const path = require('path')
  3. // 配置参数
  4. const config = {
  5. inputDir: './pages', // 要扫描的目录
  6. outputFile: './zh-CN.js', // 输出文件路径
  7. extensions: ['.js', '.vue'], // 要处理的文件扩展名
  8. chineseRegex: /[\u4e00-\u9fa5\u3000-\u303f\uff01-\uff5e\u201c-\u201d\u3008-\u3011]+/g
  9. }
  10. // 存储中文内容的 Set(自动去重)
  11. const chineseSet = new Set()
  12. /**
  13. * 递归遍历目录
  14. */
  15. function scanDirectory(dir) {
  16. const files = fs.readdirSync(dir)
  17. files.forEach(file => {
  18. const filePath = path.join(dir, file)
  19. const stat = fs.statSync(filePath)
  20. if (stat.isDirectory()) {
  21. scanDirectory(filePath)
  22. } else if (stat.isFile() &&config.extensions.includes(path.extname(filePath).toLowerCase()))
  23. {
  24. processFile(filePath)
  25. }
  26. })
  27. }
  28. /**
  29. * 处理单个文件
  30. */
  31. function processFile(filePath) {
  32. try {
  33. const content = fs.readFileSync(filePath, 'utf-8')
  34. const matches = content.match(config.chineseRegex)
  35. if (matches) {
  36. matches.forEach(text => chineseSet.add(text))
  37. }
  38. } catch (err) {
  39. console.error(`Error processing file ${filePath}:`, err)
  40. }
  41. }
  42. /**
  43. * 生成输出文件
  44. */
  45. function generateOutput() {
  46. const output = `// 自动生成的中文字符列表
  47. module.exports = ${JSON.stringify([...chineseSet], null, 2)}`
  48. fs.writeFileSync(config.outputFile, output, 'utf-8')
  49. console.log(`找到 ${chineseSet.size} 个中文字符,已保存到 ${config.outputFile}`)
  50. }
  51. // 执行主流程
  52. scanDirectory(config.inputDir)
  53. generateOutput()