md文件(table)转js文件( object)【node脚本,日常tips】

一:效果

1.读取的的markdown文件

  • md视图
    在这里插入图片描述

  • md源码

| 英文  | 中文 |
| ----- | ---- |
| hello | 你好 |
| world | 世界 |

2.生成的js文件

  • en-US
export default {
  'hello': 'hello',
  'world': 'world',
}
  • zh-CN
export default {
  'hello': '你好',
  'world': '世界',
}

二:代码

注意:代码中使用了lodash库,以及函数组合、函数柯里化和正则技术。

1.util.js


const filterBlank = (item) => {return item != ''};

exports.filterBlank = filterBlank;

2.convertMdToJs.js

const fs = require('fs');
const lodash = require('lodash/fp');
const { filterBlank } = require('../spider/util');

const transformTable = (table) => {
  // lodash.split('| 英文  | 中文 |\r\n| ----- | ---- |\r\n')
  const dealWithStream = lodash.flowRight([lodash.map(transformTr), lodash.filter(filterBlank), lodash.split('\r\n')]);
  return dealWithStream(table);
}

const transformTr = (tr) => {
  const fn = lodash.flowRight(lodash.map(lodash.trim), lodash.filter(filterBlank), [lodash.split('|')])
  let data = fn(tr);
  return {
    'en-US': data[0],
    'zh-CN': data[1]
  }
}

const convertMdToJs = (mdDir, enDir, zhDir, mdFileName, jsFileName) =>{
  const mdFilePath = mdDir + mdFileName;
  const enFilePath = enDir + jsFileName;
  const zhFilePath = zhDir + jsFileName;
  // 1.读取数据
  let data = fs.readFileSync(mdFilePath, { encoding: 'utf-8' });
  // 2.转换数据
  let kvArr = transformTable(data);
  kvArr.shift();// 去除表头
  kvArr.shift();// 去除|...|...|
  let enFiledata = 'export default { \n';
  let zhFiledata = 'export default { \n';
  kvArr.map((item) => {
    const en = item['en-US'];
    const zh = item['zh-CN'];
    enFiledata += `  '${en}': '${en}',\n`;
    zhFiledata += `  '${en}': '${zh}',\n`;
  })
  enFiledata += '}';
  zhFiledata += '}';
  // 3.写入数据
  fs.writeFileSync(enFilePath,enFiledata);
  fs.writeFileSync(zhFilePath,zhFiledata);
}

exports.convertMdToJs = convertMdToJs;

3.script.js

const { convertMdToJs } = require('./convertMdToJs');
const lodash = require('lodash');
const fs = require('fs');

// 转换指定一个md文件
function convertOne(mdDir, enDir, zhDir, mdName, jsName) {
  try {
    convertMdToJs(mdDir, enDir, zhDir, mdName, jsName);
  } catch (e) {
    console.log(`${mdName} 转换失败,请检查`)
  }
}

// 转换一个文件夹的下的所有md文件(一级目录)
function convertAll(mdDir, enDir, zhDir) {
  // 柯里化
  const curriedConvertMdToJs = lodash.curry(convertMdToJs, 5);
  const mdToJs = curriedConvertMdToJs(mdDir, enDir, zhDir);// 注意相对路径容易报错
  const reg = /.md/;
  const fileArr = fs.readdirSync(mdDir);
  const mdFileArr = fileArr.filter((item) => {
    return reg.test(item)
  });
  mdFileArr.map((mdFileName) => {
    const jsFileName = mdFileName.split('.md')[0] + '.js';
    mdToJs(mdFileName, jsFileName)
  })
}

function main() {
  // test one
  // convertOne('C:\\Users\\22681\\Desktop\\mdToJs\\public\\', 'C:\\Users\\22681\\Desktop\\mdToJs\\locales\\en-US\\', 'C:\\Users\\22681\\Desktop\\mdToJs\\locales\\zh-CN\\','test.md', 'test.js');

  // test all
  convertAll('C:\\Users\\22681\\Desktop\\mdToJs\\public\\', 'C:\\Users\\22681\\Desktop\\mdToJs\\locales\\en-US\\', 'C:\\Users\\22681\\Desktop\\mdToJs\\locales\\zh-CN\\');
}


main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值