node脚本匹配vue项目中除注释外所有汉字,并导出成json文件

由于公司业务需要,写了一年的项目,要做国际化,一个一个整理汉字太麻烦,so,整理了个脚本


const fs = require('fs');
const path = require('path');
let filesList = [];//vue 文件路径列表
let jsFilesList = [];//ts 文件路径列表
function readFileList(dir, filesList = []) {  
    const files = fs.readdirSync(dir); 
        files.forEach((item) => { 
            var fullPath = path.join(dir, item);    
            const stat = fs.statSync(fullPath); 
            if (stat.isDirectory()) {         
                readFileList(path.join(dir, item), filesList); //递归读取文件    
            } else if(fullPath.endsWith('.vue')) {              
                filesList.push(fullPath);              
            }else if (/(.ts|.js)$/g.test(fullPath)){
                jsFilesList.push(fullPath)
            }
         });  
        return filesList;
    }
    readFileList(path.resolve(__dirname, 'src'),filesList);

    fs.stat(path.resolve(__dirname, 'src/local'),function(err,statObj){
        // 判断local文件是否存在,如果不存在则创建,如果创建则直接处理json文件
        if(!statObj){
            fs.mkdir(path.resolve(__dirname, 'src/local'),function(err){
                writeFile(filesList,'index');
                writeFile(jsFilesList,'jsIndex');
            })
        }else{
            writeFile(filesList,'index');
            writeFile(jsFilesList,'jsIndex');
        }
    })
    
    function writeFile (fileArr,fileName){
       const reg_1 = /(?<!\/\/\s*.*|<!--\s.*)([\u2E80-\u9FFF]*\$?{{0,2}\w*\.*\w*}{0,2}[\u2E80-\u9FFF]+)*/g
        const obj = fileArr.reduce((pre,cur)=>{
            let  fileSuffix = cur.match(/(.ts|.js|.vue)$/g)?.[0];
            let pathName = path.basename(cur,fileSuffix)
            // 如果文件名是index,取父级文件名
            if(pathName === 'index'){
               const pathArr =  cur.split(path.sep);
               pathName = pathArr[pathArr.length-2];
            }
            pre[pathName] = {};
            let pkg = fs.readFileSync(cur,'utf-8');
            const strArr = pkg.match(reg_1); 
            if(strArr?.length){
                strArr.forEach((item,index)=>{
                    if(item.includes('{')){
                        let index = 0
                        item = item.replace(/\$?{{0,2}\w*\.*\w*}{0,2}/g,function(val){
                            if(val){
                                index ++ 
                                return `{${index-1}}`
                            }else{
                                return ''
                            }
                        })
                       
                    }
                    // 如果匹配的字符串的字数大于10,处理key 值
                    if(item.length){
                        let str = item.length >=10? `${item.substring(0,7)}...`:item;
                        pre[pathName][str] = item;
                    }
                   
                })
            }
            return pre
        },{})
        // 创建json文件
        fs.writeFile(path.resolve(__dirname, `src/local/${fileName}.json`),JSON.stringify(obj), 'utf8',function(err){
            // console.log(err)
        })
   }
    

根据需要修改符合自己项目风格的正则,将此文件放跟src平级的目录下,执行,会在src目录下新建local文件夹

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值