@@ -11,6 +11,7 @@ const createServerConfig = require('../webpack/createServerConfig')
11
11
const { createBundleRenderer } = require ( 'vue-server-renderer' )
12
12
const { normalizeHeadTag, applyUserWebpackConfig } = require ( '../util/index' )
13
13
const { version } = require ( '../../../package' )
14
+ const pLimit = require ( 'p-limit' )
14
15
15
16
/**
16
17
* Expose Build Process Class.
@@ -91,8 +92,10 @@ module.exports = class Build extends EventEmitter {
91
92
// render pages
92
93
logger . wait ( 'Rendering static HTML...' )
93
94
95
+ // Use p-limit to throttle number of files done at the same time
96
+ const limit = pLimit ( RENDER_LIMIT )
94
97
const pagePaths = await Promise . all (
95
- this . context . pages . map ( page => this . renderPage ( page ) )
98
+ this . context . pages . map ( page => limit ( ( ) => this . renderPage ( page ) ) )
96
99
)
97
100
98
101
readline . clearLine ( process . stdout , 0 )
@@ -145,16 +148,17 @@ module.exports = class Build extends EventEmitter {
145
148
version
146
149
}
147
150
151
+ const filename = pagePath . replace ( / \/ $ / , '/index.html' ) . replace ( / ^ \/ / , '' )
152
+ const filePath = path . resolve ( this . outDir , filename )
148
153
try {
149
- const readable = await this . renderer . renderToStream ( context )
150
- const filename = pagePath . replace ( / \/ $ / , '/index.html' ) . replace ( / ^ \/ / , '' )
151
- const filePath = path . resolve ( this . outDir , filename )
154
+ const readable = this . renderer . renderToStream ( context )
152
155
await fs . ensureDir ( path . dirname ( filePath ) )
153
- return pipe ( filePath , readable )
156
+ await pipe ( filePath , readable )
154
157
} catch ( e ) {
155
158
console . error ( logger . error ( chalk . red ( `Error rendering ${ pagePath } :` ) , false ) )
156
159
throw e
157
160
}
161
+ return filePath
158
162
}
159
163
}
160
164
0 commit comments