nodejs提取文件中特定内容

const path = require('path');
const fs = require('fs');
var iconv = require('iconv-lite');
// node执行路径
const dirPath = process.cwd();

// 判断是文件夹还是文件
const fileRead = filedir => {
  return new Promise((resolve, reject) => {
    fs.stat(filedir, function(err, stats) {
      if (err) {
        console.warn('获取文件stats失败');
        reject(err);
      } else {
        //文件
        const isFile = stats.isFile();
        // 文件夹
        const isDir = stats.isDirectory();
        if (isFile) {
          resolve(true);
        }
        if (isDir) {
          resolve(false);
        }
      }
    });
  });
};
// 判断文件后缀
function is_filetype(filename, types) {
  types = types.split(',');
  var pattern = '.(';
  for (var i = 0; i < types.length; i++) {
    if (0 != i) {
      pattern += '|';
    }
    pattern += types[i].trim();
  }
  pattern += ')$';
  return new RegExp(pattern, 'i').test(filename);
}
// 入口,content接收路径
const fileTra = content => {
  //根据文件路径读取文件,返回文件列表
  return new Promise((resolve, reject) => {
    fs.readdir(content, async function(err, files) {
      if (err) {
        console.warn(err);
        reject(err);
      } else {
        //遍历读取到的文件列表
        await fs.mkdir(path.join(dirPath), { recursive: true }, async err => {
          if (err) throw err;

          for (let i = 0; i < files.length; i++) {
            //获取当前文件的绝对路径
            const filedir = path.join(content, files[i]);
            //根据文件路径获取文件信息
            const isFile = await fileRead(filedir);
            // 如果是文件夹,递归遍历该文件夹下面的文件
            if (!isFile) {
              const backupPath = filedir.substr(
                filedir.indexOf('/指定文件名')
              );
              await fs.mkdir(
                path.join(dirPath, 'backupI8n', backupPath),
                { recursive: true },
                async err => {
                  await fileTra(filedir);
                }
              );
            } else {
              // 读取文件
              if (is_filetype(files[i], 'vue')) {
                const fileContent = fs.readFileSync(filedir);
                // console.log('fileContent', files[i]);
                await getChineseToArray(fileContent, filedir);
              }
            }
          }
        });
        resolve(files);
      }
    });
  });
};
async function getChineseToArray(content, filedir) {
  let obj = {};
  let strHead = '{',
    strEnd = '}',
    all = [];

  all.push(strHead);

  let str = iconv.decode(content, 'utf-8');

  // 代码按行分割出来
  let arr = str.split('\n');

  arr.forEach(async function(e, i) {
    if (
      e.indexOf('//') == -1 &&
      e.indexOf('console.log') == -1 &&
      e.indexOf('@param') == -1 &&
      e.indexOf('@brief') == -1
    ) {
      isChineseInit = true;
      var a = e.split('\n');
      a.forEach(async function(m) {
        if (
          m.indexOf('* ') == -1 &&
          m.indexOf(' * ') == -1 &&
          m.indexOf('/*') == -1 &&
          m.indexOf('
                    

你可能感兴趣的:(node.js,javascript)