refactor: use cache for blogDatas generation

This commit is contained in:
endiliey 2018-07-30 15:23:56 +08:00
parent f7f063c56e
commit a80399631f
4 changed files with 25 additions and 9 deletions

View file

@ -17,8 +17,8 @@ class App extends React.Component {
<div>
{blogDatas.map(({path}) => {
return (
<div>
<Link key={path} to={path}>
<div key={path}>
<Link to={path}>
{path}
</Link>
</div>

14
lib/helpers/generate.js Normal file
View file

@ -0,0 +1,14 @@
const path = require('path');
const fs = require('fs-extra');
const genPath = path.resolve(__dirname, '../generated');
fs.ensureDirSync(genPath);
const genCache = new Map();
module.exports = async function(file, content) {
const cached = genCache.get(file);
if (cached !== content) {
await fs.writeFile(path.join(genPath, file), content);
genCache.set(file, content);
}
};

1
lib/helpers/index.js Normal file
View file

@ -0,0 +1 @@
exports.generate = require('./generate');

View file

@ -2,6 +2,7 @@ const fs = require('fs-extra');
const path = require('path');
const loadConfig = require('./config');
const loadBlog = require('./blog');
const {generate} = require('../helpers');
module.exports = async function load(sourceDir) {
// load siteConfig
@ -10,13 +11,13 @@ module.exports = async function load(sourceDir) {
// extract data from all blog files
const blogDatas = await loadBlog(sourceDir);
fs.writeFile(
path.resolve(__dirname, '../generated/blogDatas.js'),
`${'/**\n' +
' * @' +
'generated\n' +
' */\n' +
'module.exports = '}${JSON.stringify(blogDatas, null, 2)};\n`
await generate(
'blogDatas.js',
`${'/**\n * @generated\n */\n' + 'module.exports = '}${JSON.stringify(
blogDatas,
null,
2
)};\n`
);
// resolve outDir