【问题标题】:Nuxt SSR rebuild of routes.json on the fly (production)Nuxt SSR 即时重建 routes.json(生产)
【发布时间】:2022-01-23 13:05:39
【问题描述】:

我很确定这个问题的答案是否定的......但是有没有办法在生产服务器运行时即时启动 .nuxt/routes.json 和 .nuxt/router.js 文件的重建从本机 nuxt 功能中运行。 nuxt.config.js router.extendRoutes 在初始构建时构建路由 - 在服务器仍在运行时没有找到进行更新的方法。宁愿不必进行新的 npm 构建。

// Router middleware
router: {
    middleware: ['router-agent', 'ssr-promises'],
    async extendRoutes (routes, resolve) {
        // pulls in routes from external file
        await customRoutes(routes, resolve)
    }
},

我们有一系列需要从 CMS 构建的自定义路由

// extendRoutes snippet
let pageRoutes = require('./routes-bkp.json')

try {
  const { data: { pages } } = await getPagesForRoutes.queryCMS()
  pageRoutes = pages
  console.log('Route Request Succeeded.')
} catch {
  console.log('Route Request Succeeded.!  Using backup version.')
}

pageRoutes.forEach(({ slug }) => {
  routes.unshift({
    name: slug,
    path: `/:page(${slug})`,
    component: '~/pages/_page'
  })
})

所有这些的目的是在 CMS 更新页面时有一个客户端构建触发器。

更多关于 router.js 的信息在这里: https://nuxtjs.org/docs/directory-structure/nuxt

关于在这里扩展路由器: https://nuxtjs.org/docs/features/file-system-routing/#extending-the-router

【问题讨论】:

  • 对于target: 'static''server'
  • 另外,你检查过preview mode吗?
  • 谢谢@kissu,是的,目标:'服务器'。预览模式无法解决此问题,因为刷新单个页面,我们需要刷新(或添加到数组的开始/结束)整个站点的所有路由。
  • 你试过using build.watch吗?您可以在服务器上生成一个json 文件,该文件将包含有关您的 cms 的动态路由的信息,将该文件导入您的 extendRoutes 并 build.watch 该文件以防它不会触发重建
  • 谢谢,我会写一个答案

标签: vue.js nuxt.js vue-router


【解决方案1】:

build.watch 可能会帮助您在文件更改时触发服务器重启。

您还可以在服务器上生成一个 json 文件,其中将包含有关您的 CMS 的动态路由的信息,将该文件导入您的 extendRoutesbuild.watch 该文件,以防它在启动时不会触发重启改变了

生产环境可以use nuxt programmatically暴露一个服务器中间件,监听请求并重启服务器

【讨论】:

  • 这个在生产中工作吗?还有,需要吗?你不能只 ping API 吗?
  • @kissu 答案已更新
  • 该死的,笨蛋!惊人的答案人。不知道这是可能的。
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2021-05-22
  • 2018-07-28
  • 2020-10-19
  • 2020-09-19
  • 1970-01-01
相关资源
最近更新 更多