UNPKG

cherry-doc

Version:
139 lines (111 loc) 4.01 kB
/** * @file 遍历所有md文件,生成data文件。 * @author zhangpeng53 */ var fs = require('fs'); var path = require('path'); var walk = require('walk'); var yamlFront = require('yaml-front-matter'); var sh = require('child_process').execSync; var chalk = require('chalk'); function fsExistsSync(path) { try { fs.accessSync(path, fs.F_OK); } catch (e) { return false; } return true; } module.exports = function walkMD(config) { var dist = path.join(config.theme, '/tmp'); return new Promise(function (resolve, reject) { var mdData = {}; var source = {}; function parseData(arr, category, page, rank, file) { var key = category + "_" + page; var have = !!arr.length; have = arr.some(function (item) { if (item.key === key) { item.files[rank] = file; return true; } return false; }); if (!have) { arr.push({ page: page, key: key, files: [file] }); } } function writeFiles(data) { for (var k in data) { var category = data[k]; category.forEach(function (item) { var key = item.key; var outFile = ''; item.files.forEach(function (f) { outFile += 'require(\'' + f + '\'),\n'; }); source[key] = './tmp/__' + key; var out = 'module.exports = [\n' + outFile + ']'; fs.writeFileSync(dist + ('/__' + key + '.js'), out); }); } } function walkdir() { var walker = walk.walk(config.root); walker.on('file', function (root, fileStats, next) { var name = fileStats.name; var ext = path.extname(name); var basename = path.basename(name, config.ext); var file = path.resolve('', root + '/' + name); if (ext === config.ext) { var input = fs.readFileSync(file, 'utf-8'); var yaml = yamlFront.loadFront(input, 'content'); // console.log(yaml); var page = yaml.page; var rank = yaml.rank; var category = yaml.category; if (!category) category = '__default__'; if (!rank) rank = 0; if (category !== '__nav__') { if (!mdData[category]) mdData[category] = []; parseData(mdData[category], category, page, rank, file); } } next(); }); walker.on('end', function () { console.log(chalk.green('=========解析markdown=========')); console.log(chalk.green(JSON.stringify(mdData, null, 4))); console.log(chalk.green('=========end=========')); writeFiles(mdData); //将config 写入 文件 var data = { md: mdData, config: config, source: source, root: process.cwd() }; fs.writeFileSync(dist + '/__md__.json', JSON.stringify(data, null, 4)); resolve(); }); walker.on('error', function (e) { console.log(e); reject(e); }); } walkdir(); }); }; ; var _temp = function () { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } __REACT_HOT_LOADER__.register(sh, 'sh', 'src/walkmd.js'); __REACT_HOT_LOADER__.register(fsExistsSync, 'fsExistsSync', 'src/walkmd.js'); }(); ;