mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-23 14:15:13 +00:00
Adds generate error report from renderer and minification. Changes the behavior where generate would terminate on error, now it instead gathers the error from crashing routes and compiles an error report.
This commit is contained in:
parent
ded7de0e72
commit
d469f38d98
@ -41,6 +41,7 @@ const defaults = {
|
||||
|
||||
export default function () {
|
||||
const s = Date.now()
|
||||
let errors = []
|
||||
/*
|
||||
** Set variables
|
||||
*/
|
||||
@ -97,14 +98,26 @@ export default function () {
|
||||
yield routes.splice(0, 500).map((route) => {
|
||||
return co(function * () {
|
||||
yield waitFor(n++ * self.options.generate.interval)
|
||||
var { html } = yield self.renderRoute(route, { _generate: true })
|
||||
html = minify(html, self.options.generate.minify)
|
||||
var { html, error } = yield self.renderRoute(route, { _generate: true })
|
||||
// TODO: if error is truthy and html null, do continue
|
||||
if(error) {
|
||||
// console.log("error caught", error)
|
||||
errors.push([route, error.errorObj])
|
||||
return
|
||||
}
|
||||
try {
|
||||
var minifiedHtml = minify(html, self.options.generate.minify)
|
||||
} catch(err) {
|
||||
let minifyErr = new Error(`HTML minification failed. Make sure the route generates valid HTML. Failed HTML:\n ${html}`)
|
||||
errors.push([route, minifyErr])
|
||||
return
|
||||
}
|
||||
var path = join(route, sep, 'index.html') // /about -> /about/index.html
|
||||
debug('Generate file: ' + path)
|
||||
path = join(distPath, path)
|
||||
// Make sure the sub folders are created
|
||||
yield mkdirp(dirname(path))
|
||||
yield writeFile(path, html, 'utf8')
|
||||
yield writeFile(path, minifiedHtml, 'utf8')
|
||||
})
|
||||
})
|
||||
}
|
||||
@ -119,6 +132,12 @@ export default function () {
|
||||
.then(() => {
|
||||
const duration = Math.round((Date.now() - s) / 100) / 10
|
||||
debug(`HTML Files generated in ${duration}s`)
|
||||
|
||||
if(errors.length) {
|
||||
console.error("==== Error report ==== \n" + errors.map( ([route, err]) => {
|
||||
return `Route: '${route}'\n${err.stack}`
|
||||
}).join("\n\n"))
|
||||
}
|
||||
return this
|
||||
})
|
||||
}
|
||||
|
@ -96,7 +96,19 @@ export function renderRoute (url, context = {}) {
|
||||
// Call renderToSting from the bundleRenderer and generate the HTML (will update the context as well)
|
||||
const self = this
|
||||
return co(function * () {
|
||||
let APP = yield self.renderToString(context)
|
||||
try {
|
||||
var APP = yield self.renderToString(context)
|
||||
} catch(err) {
|
||||
return {
|
||||
html : null,
|
||||
error : {
|
||||
statusCode : 500,
|
||||
message : err.message,
|
||||
errorObj : err
|
||||
},
|
||||
redirected: context.redirected
|
||||
}
|
||||
}
|
||||
if (!context.nuxt.serverRendered) {
|
||||
APP = '<div id="__nuxt"></div>'
|
||||
}
|
||||
@ -168,4 +180,4 @@ export function renderAndGetWindow (url, opts = {}) {
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user