【问题标题】:nuxt 2.14 generate does not update asyncDatanuxt 2.14 generate 不更新 asyncData
【发布时间】:2021-01-19 03:52:19
【问题描述】:

我正在密切关注此功能 (https://nuxtjs.org/blog/nuxt-static-improvements/#generate-time-cache-vs-full-webpack-build)

我可能弄错了,但我希望澄清我是否可以正确使用此功能。

基本上,我想跳过文章中强调的 webpack 构建,并通过 nuxt generate 构建我的页面。问题是我的数据源通常会更改,但我的站点代码不会更改,我认为在 Nuxt 2.14 中使用 nuxt generate 将有助于我跳过 webpack 构建的用例。

然而,在运行 nuxt generate 命令跳过 webpack 构建并直接跳转到页面生成时,生成的页面似乎已更新(如预期的那样),但 asyncData 中的数据似乎没有正在更新/刷新。

nuxt.config.js

generate: {
    crawler: false,
    async routes() {
      let finalArray = readFinalArrayFromSomeDatabase();

      await fs.writeJson('static/data/index.json', finalArray); // writing new array to static folder

      generateSomeNewRoutes(finalArray); // working correctly!!!
    }
}

一些_slug.vue

async asyncData(params) {
    // this runs after previous code runs
    const testArray = require("../../../static/data/index.json"); // this is not updated!!!
}

写入的 index.json 已更新,但在 asyncData 中读取的 index.json 未更新。有什么方法可以触发 asyncData 的变化吗?或者这是否意味着当我的数据发生变化并且无法在 nuxt 2.14 中使用此功能时,我必须始终重建 webpack?

【问题讨论】:

    标签: javascript nuxt.js


    【解决方案1】:

    在您的asyncData 中,您正在使用require 加载 JSON,这会将 JSON 添加到 webpack 构建中,因此此后不会更新。

    相反,您可以使用 payload 将数据传递给 asyncData。例如:

      generate: {
        crawler: false,
        async routes() {
          const finalArray = readFinalArrayFromSomeDatabase();
    
          return generateSomeNewRoutes(finalArray).map(route => ({ route, payload: finalArray }));
        }
    }
    

    然后在你的组件中:

    async asyncData({ payload }) {
      if (payload) {
        // you can now access the entire finalArray via payload
        // though note this will only work at generate time and during dev
        // you should have another solution to fetch/require data differently
      }
    }
    

    【讨论】:

    • 了解工作流程,非常感谢您的回答,并会试一试。想知道“您应该有另一种解决方案来以不同方式获取/要求数据”是什么意思?这是否意味着我必须考虑其他情况?
    • 请问有效载荷大小是否有任何限制?我传的finalArray真的很大,不知道会不会有什么问题
    • 理想情况下,您应该有一些代码允许页面在开发模式下加载(因为只有在运行nuxt generate 时才会传递有效负载)。有效载荷大小不应该有任何限制。当您使用完全静态模式时,只有 asyncData 返回 会内联到您的页面中。
    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2020-12-02
    • 2021-05-23
    • 2018-02-20
    • 2022-11-11
    • 2021-07-26
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多