UNPKG

3.51 kBJavaScriptView Raw
1/**
2 * @file 遍历所有md文件,生成data文件。
3 * @author zhangpeng53
4 */
5var fs = require('fs');
6var path = require('path');
7var walk = require('walk');
8var yamlFront = require('yaml-front-matter');
9var sh = require('child_process').execSync;
10var chalk = require('chalk');
11
12module.exports = function walkMD(config) {
13
14 return new Promise(function (resolve, reject) {
15 var dist = config.theme + '/tmp';
16 var mdData = {};
17 var source = {};
18
19 function parseData(arr, category, page, rank, file) {
20 var key = category + "_" + page;
21
22 var have = !!arr.length;
23
24 have = arr.some(function (item) {
25 if (item.key === key) {
26 item.files[rank] = file;
27 return true;
28 }
29
30 return false;
31 });
32
33 if (!have) {
34 arr.push({
35 page: page,
36 key: key,
37 files: [file]
38 });
39 }
40 }
41
42 function writeFiles(data) {
43 for (var k in data) {
44 var category = data[k];
45 category.forEach(function (item) {
46 var key = item.key;
47 var outFile = '';
48 item.files.forEach(function (f) {
49 outFile += 'require(\'' + f + '\'),\n';
50 });
51
52 source[key] = './tmp/__' + key;
53
54 var out = 'module.exports = [\n' + outFile + ']';
55 fs.writeFileSync(dist + ('/__' + key + '.js'), out);
56 });
57 }
58 }
59
60 var walker = walk.walk(config.root);
61 walker.on('file', function (root, fileStats, next) {
62 var name = fileStats.name;
63 var ext = path.extname(name);
64 var basename = path.basename(name, config.ext);
65
66 var file = path.resolve('', root + '/' + name);
67 if (ext === config.ext) {
68 var input = fs.readFileSync(file, 'utf-8');
69 var yaml = yamlFront.loadFront(input, 'content');
70 // console.log(yaml);
71 var page = yaml.page;
72 var rank = yaml.rank;
73 var category = yaml.category;
74
75 if (!category) category = '__default__';
76
77 if (category !== '__nav__') {
78 if (!mdData[category]) mdData[category] = [];
79 parseData(mdData[category], category, page, rank, file);
80 }
81 }
82 next();
83 });
84
85 walker.on('end', function () {
86 console.log(chalk.green('=========解析markdown========='));
87 console.log(chalk.green(JSON.stringify(mdData, null, 4)));
88 console.log(chalk.green('=========end========='));
89
90 writeFiles(mdData);
91
92 //将config 写入 文件
93 var data = {
94 md: mdData,
95 config: config,
96 source: source,
97 root: process.cwd()
98 };
99 fs.writeFileSync(dist + '/__md__.json', JSON.stringify(data, null, 4));
100
101 resolve();
102 });
103
104 walker.on('error', function (e) {
105 console.log(e);
106 reject(e);
107 });
108 });
109};
110;
111
112var _temp = function () {
113 if (typeof __REACT_HOT_LOADER__ === 'undefined') {
114 return;
115 }
116
117 __REACT_HOT_LOADER__.register(sh, 'sh', 'src/walkmd.js');
118}();
119
120;
\No newline at end of file