Skip to content

Commit d1ed387

Browse files
committed
add async handling for doc build when writing files
1 parent e1ca429 commit d1ed387

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

packages/docusaurus-1.x/lib/server/generate.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async function execute() {
1919
const fs = require('fs-extra');
2020
const readMetadata = require('./readMetadata.js');
2121
const path = require('path');
22-
const {minifyCss, isSeparateCss, autoPrefixCss} = require('./utils');
22+
const {minifyCss, isSeparateCss, autoPrefixCss, processPromisesBatch} = require('./utils');
2323
const React = require('react');
2424
const mkdirp = require('mkdirp');
2525
const glob = require('glob');
@@ -54,6 +54,18 @@ async function execute() {
5454
}
5555
}
5656

57+
async function writeFileAndCreateFolderAsync(file, content) {
58+
await mkdirp.async(path.dirname(file));
59+
await fs.writeFile(file, content);
60+
61+
// build extra file for extension-less url if "cleanUrl" siteConfig is true
62+
if (siteConfig.cleanUrl && file.indexOf('index.html') === -1) {
63+
const extraFile = file.replace(/\.html$/, '/index.html');
64+
await mkdirp.async(path.dirname(extraFile));
65+
await fs.writeFile(extraFile, content);
66+
}
67+
}
68+
5769
console.log('generate.js triggered...');
5870

5971
readMetadata.generateMetadataDocs();
@@ -115,10 +127,10 @@ async function execute() {
115127
const MetadataBlog = require('../core/MetadataBlog.js');
116128

117129
let files = glob.sync(join(CWD, 'blog', '**', '*.*'));
118-
files
130+
const writeFiles = files
119131
.sort()
120132
.reverse()
121-
.forEach((file) => {
133+
.map(async (file) => {
122134
// Why normalize? In case we are on Windows.
123135
// Remember the nuance of glob: https://www.npmjs.com/package/glob#windows
124136
const normalizedFile = path.normalize(file);
@@ -132,9 +144,11 @@ async function execute() {
132144
return;
133145
}
134146
const targetFile = join(buildDir, 'blog', urlPath);
135-
writeFileAndCreateFolder(targetFile, blogPost);
147+
await writeFileAndCreateFolderAsync(targetFile, blogPost);
136148
});
137149

150+
await processPromiseprocessPromisesBatch(writeFiles)
151+
138152
// create html files for all blog pages (collections of article previews)
139153
const blogPages = blog.getPagesMarkup(MetadataBlog.length, siteConfig);
140154
Object.keys(blogPages).forEach((pagePath) => {

packages/docusaurus-1.x/lib/server/utils.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const autoprefixer = require('autoprefixer');
99
const postcss = require('postcss');
1010
const path = require('path');
1111
const escapeStringRegexp = require('escape-string-regexp');
12+
const chunk = require('lodash.chunk')
1213

1314
function getSubDir(file, refDir) {
1415
const subDir = path.dirname(path.relative(refDir, file)).replace(/\\/g, '/');
@@ -79,11 +80,19 @@ function replaceAssetsLink(oldContent, location) {
7980
return lines.join('\n');
8081
}
8182

83+
async function processPromisesBatch(promises, batchSize = 6) {
84+
const chunks = chunk(promises, batchSize)
85+
for (let c of chunks) {
86+
await Promise.all(c)
87+
}
88+
}
89+
8290
module.exports = {
8391
getSubDir,
8492
getLanguage,
8593
isSeparateCss,
8694
minifyCss,
8795
autoPrefixCss,
8896
replaceAssetsLink,
97+
processPromisesBatch
8998
};

packages/docusaurus-1.x/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@
7676
"tcp-port-used": "^1.0.1",
7777
"tiny-lr": "^1.1.1",
7878
"tree-node-cli": "^1.2.5",
79-
"truncate-html": "^1.0.3"
79+
"truncate-html": "^1.0.3",
80+
"lodash.chunk": "^4.2.0"
8081
},
8182
"devDependencies": {
8283
"babel-eslint": "^10.1.0",

0 commit comments

Comments
 (0)