1.UnhandledPromiseRejectionWarning: Error: Server-side bundle should have one single entry file. Avoid using CommonsChunkPlugin in the server config.

image.png
vue.config.js 需要配置
optimization: {
splitChunks: TARGET_NODE ? false : undefined
},

2.(node:12032) UnhandledPromiseRejectionWarning: Unhandled promise rejection

Promise 中抛出异常,但是没有处理异常的逻辑
需要给promise加上catch
new Promise((resolve, reject) => {
setTimeout(() => reject(‘error’), 500);
})
.catch(error => console.log(‘caught’, error))

但是如果在catch中的代码不小心也出现了错误,如下:
new Promise((_, reject) => reject(new Error(‘woops’)))
.catch(error => { console.log(‘caught’, err.message); });

这种错误就会层层上报,这个例子中虽然用 .catch() 捕捉处理了 Promise 中的 rejection;但是注意在 err.message 中的 err 是未定义的,代码执行时会抛出错误,由于没有后续的处理,所以也会输出 UnhandledPromiseRejectionWarning 的警告

3.unhandledRejection 事件

在 node process 中有一个 unhandledRejection 事件,当没有对 Promise 的 rejection 进行处理就会抛出这个事件(这只对原生 Promise 有效)
process.on(‘unhandledRejection’, error => {
// Will print “unhandledRejection err is not defined”
console.log(‘unhandledRejection’, error.message);
});

4.如果我们不想监听 unhandledRejection 事件

我们可以在 .catch() 中传入一个空函数,假装对 rejection 进行了处理,这样也没有触发 unhandledRejection 事件
new Promise((_, reject) => reject(new Error(‘woops’)))
.catch(new Function());

怎么得到 错误堆栈

Node.js v8.1.2 Documentation: https://nodejs.org/api/process.html#process_event_unhandledrejection