Javascript 加载时动态页面,而不是构建时动态页面

Javascript 加载时动态页面,而不是构建时动态页面,javascript,node.js,reactjs,gatsby,sanity,Javascript,Node.js,Reactjs,Gatsby,Sanity,我正在建立一个编辑网站,定期添加新内容。因此,他们要求在加载时加载文章和文章内容,而不必运行构建并等待它。速度对他们来说非常重要,即使花了一些时间优化构建速度,他们也需要更快的速度 我使用sanity客户端可以很好地获取文章,但是当你点击一篇文章时,它会寻找文章的slug.js,而不是某种文章页面。如果我可以让它加载类似于article.js的内容,我可以使用URL中的slug参数来获取页面内容,但我不确定如何在不更改URL结构的情况下实际加载页面而不是slug.js 更让人困惑的是,这里实际上

我正在建立一个编辑网站,定期添加新内容。因此,他们要求在加载时加载文章和文章内容,而不必运行构建并等待它。速度对他们来说非常重要,即使花了一些时间优化构建速度,他们也需要更快的速度

我使用sanity客户端可以很好地获取文章,但是当你点击一篇文章时,它会寻找
文章的slug.js
,而不是某种文章页面。如果我可以让它加载类似于
article.js
的内容,我可以使用URL中的slug参数来获取页面内容,但我不确定如何在不更改URL结构的情况下实际加载页面而不是
slug.js


更让人困惑的是,这里实际上也有一个类别,所以URL看起来像:
www.example.com/category/the slug of the article

简短回答:您不能使用静态站点生成器在“加载”时构建动态页面

TL;博士
我假设您正在生成最终的客户端站点。否则,您可以使用运行
gatsby develope
的AWS(或任何其他服务中的类似服务)的EC2实例来实现您想要做的事情。Gatsby使用
\uu refresh
URL参数使功能自动向自己的域发送
curl
请求。当然,对于它自己的行为,它只在《盖茨比开发》中提供:

curl -X POST http://localhost:8000/__refresh
为此,您需要启用
启用\u GATSBY\u REFRESH\u ENDPOINT
,因此您需要调整正在运行的命令

当然,
gatsby-develope
不会像
gatsby-build
那样在没有所有搜索引擎优化、代码改进或资产优化的情况下优化和构建“最终”静态站点,因此这种方法可能只适用于测试目的

在您的情况下,“理智”添加了一个观察者,使这项工作对您来说更容易。您只需启用以下类似功能:

注意:默认设置为
false

如果不是你的情况,你想建立一个静态网站,并在文章发布后立即显示“实时”内容,你需要在你的CMS(写文章的地方)和服务器之间进行配置

基本上,webhook是在服务器中抛出/通知另一个操作的操作。例如,一篇文章在CMS中发布,webhook就会通知服务器运行一个发布文章的部署。当然,根据项目的大小和代码优化,此操作将需要一些时间,从几十秒到15分钟(在更糟糕的情况下)

webhook的实现将依赖于CMS和服务器,但它们或多或少都非常相似


请记住,您提供的是需要编译、捆绑和构建的静态内容,这就是为什么盖茨比(以及所有静态站点生成器)如此之快,以至于您无法在最终的客户端站点中绕过此过程来使用此技术显示“实时”文章。

这就是传统服务器应用程序的工作方式。你最好看一看,或者类似的。
{
  resolve: `gatsby-source-sanity`,
  options: {
    projectId: `abc123`,
    dataset: `blog`,
    token: process.env.SANITY_TOKEN,
    graphqlTag: 'default',
    watchMode: true,
  },
},