module.exports = function NuxtLoadingScreen () { if (!this.options.dev) { return } const defu = require('defu') const LoadingUI = require('./loading') const { nuxt } = this const baseURL = nuxt.options.router.base + '_loading' const options = this.options.build.loadingScreen = defu(this.options.build.loadingScreen, { baseURL, baseURLAlt: baseURL, altPort: false, image: undefined, colors: {} }) const loading = new LoadingUI(options) nuxt.options.serverMiddleware.push({ path: '/_loading', handler: (req, res) => { loading.app(req, res) } }) if (options.altPort) { nuxt.hook('listen', async (_, { url }) => { await loading.initAlt({ url }) }) } nuxt.hook('close', async () => { await loading.close() }) nuxt.hook('bundler:progress', (states) => { loading.setStates(states) }) nuxt.hook('cli:buildError', (error) => { loading.setError(error) }) nuxt.hook('server:nuxt:renderLoading', (req, res) => { loading.serveIndex(req, res) }) }