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