@@ -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,32 +148,26 @@ 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
161
- /**
162
- * Pipes rendered static HTML to a file
163
- *
164
- * @param {string } filePath
165
- * @param {Stream.Readable } readable
166
- * @returns {Promise<void> }
167
- */
168
- function pipe ( filePath , readable ) {
165
+ function pipe ( filePath , stream ) {
169
166
return new Promise ( ( resolve , reject ) => {
170
- const outStream = fs . createWriteStream ( filePath ) ;
171
- readable . pipe ( outStream ) ;
172
- outStream . on ( 'finish' , resolve ( filePath ) ) ;
173
- readable . on ( 'error' , reject ) ;
167
+ const outStream = fs . createWriteStream ( filePath )
168
+ stream . pipe ( outStream )
169
+ outStream . on ( 'finish' , resolve )
170
+ stream . on ( 'error' , reject )
174
171
} ) ;
175
172
}
176
173
0 commit comments