1 |
|
2 |
|
3 |
|
4 |
|
5 | var fs = require('fs');
|
6 | var path = require('path');
|
7 | var walk = require('walk');
|
8 | var yamlFront = require('yaml-front-matter');
|
9 | var sh = require('child_process').execSync;
|
10 | var chalk = require('chalk');
|
11 |
|
12 | module.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 |
|
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 |
|
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 |
|
112 | var _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 |