const fs = require('fs');const yaml = require('yaml');const path = require('path');const async = require('async');const dedent = require('dedent');const blogAuthorsFile = fs.readFileSync(path.join(__dirname, '../src/data/blog/authors.yaml'),{ encoding: 'utf-8' });const blogAuthors = yaml.parse(blogAuthorsFile);const applyBlogAuthors = metadataAuthors =>metadataAuthors.split(' and ').map(authorName => {const foundAuthor = blogAuthors.find(author => author.name === authorName);return foundAuthor ? `'${foundAuthor.id}'` : authorName;}).join(', ');// eslint-disable-next-line import/no-extraneous-dependenciesconst metadataParser = require('markdown-yaml-metadata-parser');const commandLineArgs = process.argv.slice(2);const getMarkdownFilesPath = args => (args.length ? args[0] : '.');const markdownPath = path.join(getMarkdownFilesPath(commandLineArgs));const processMarkdownFile = (originalSlug, source) => {const { content, metadata } = metadataParser(source);const dateFromMetadata = new Date(metadata.date);const dateString = dateFromMetadata.toISOString().split('T')[0];const newFileName = `${dateString}-${originalSlug}.md`;const metadataAuthors = metadata.author? `[${applyBlogAuthors(metadata.author)}]`: `['node-js-website']`;const newContent = dedent`---title: ${metadata.title}blogAuthors: ${metadataAuthors}category: '${metadata.category.toLowerCase()}'---`;return { content: `${newContent}\n${content}`, filename: newFileName };};if (fs.existsSync(markdownPath)) {const filenames = fs.readdirSync(path.join(markdownPath));const markdownFilesFromDirectory = filenames.filter(filename =>filename.toLowerCase().includes('.md') &&!filename.toLowerCase().includes('index.md'));const blogQueue = async.queue((filename, callback) => {const markdownFile = path.join(markdownPath, filename);fs.readFile(markdownFile, { encoding: 'utf-8' }, (_, data) => {const originalSlug = filename.toLowerCase().replace('.md', '');const { content, filename: newFileName } = processMarkdownFile(originalSlug,data);const newMarkdownFile = path.join(markdownPath, newFileName);fs.unlink(markdownFile, () => {});fs.writeFile(newMarkdownFile, content, () => callback());});});blogQueue.push([...markdownFilesFromDirectory]);// eslint-disable-next-line no-consoleblogQueue.drain(() => console.log('Finished Processing'));}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。