ICEBREAKER / NOTES
返回归档

Nuxt Generate 遇到一个问题

The command 'nuxt generate' finished but did not exit after 5s

The command 'nuxt generate' finished but did not exit after 5s
This is most likely not caused by a bug in Nuxt.js
Make sure to cleanup all timers and listeners you or your plugins/modules start.
Nuxt.js will now force exit
DeprecationWarning: Starting with Nuxt version 3 this will be a fatal error
相关的 issues

The issues comes because we actually import the serverMiddleware when running nuxt build. 也就是说作者推荐我们写一个 module来动态添加 serverMiddleware

js
module.exports = function (moduleOptions) {
  // Add middleware only with `nuxt dev` or `nuxt start`
  if (this.options.dev || this.options._start) {
    this.addServerMiddleware('xxx')
  }
}

更换为本项目时,直接

js
import serverMiddlewares from '~/serverMiddleware/index'

却出现了找不到 ~/serverMiddleware/index 的问题,原因在于 module 的加载是先于 nuxt 的 alias 分析的,那么问题来了 本人不喜欢使用 commonjs + 非常想用 alias , 此时自然而然想到了 rollup

我把 serverMiddleware的入口从

js
export default [
  {
    path: '',
    handler: '@/serverMiddleware/sitemap/index.js',
  },
  {
    path: '/api',
    handler: '@/serverMiddleware/router/index.js',
  },
  {
    path: '/graphql',
    handler: '@/serverMiddleware/dist/graphql/index.js',
  },
]

to

js
import sitemap from '~/serverMiddleware/sitemap/index.js'
import api from '~/serverMiddleware/router/index.js'
import graphql from '~/serverMiddleware/graphql/index.js'
export default [
  {
    path: '',
    handler: sitemap,
  },
  {
    path: '/api',
    handler: api,
  },
  {
    path: '/graphql',
    handler: graphql,
  },
]

把 nuxt 的解析交给了 rollup 做

然后在 ~/modules/loadServerMiddleware/index 引入

js
import serverMiddlewares from '~/serverMiddleware/index.js'

export default function loadServerMiddleware(moduleOptions) {
  // Add middleware only with `nuxt dev` or `nuxt start`
  if (this.options.dev || this.options._start) {
    serverMiddlewares.forEach((x) => {
      this.addServerMiddleware(x)
    })
  }
}

这样就完成了只在 nuxt dev 或者 nuxt start 的时候添加 serverMiddleware

文章目录

阅读设置

正文字号

设置会保存在当前浏览器。