javascript - 按需生成静态站点
问题描述
嘿[服务],这是一些 JSON。您能否将数据放入您的 Vue 模板并将生成的 HTML 站点发回给我?
我有一项服务,用户可以在其中创建表单。保存表单后,我想从中生成一个静态 HTML 页面。这个想法是将生成的 HTML 文档显示给将实际回答表单问题的不同用户集。
创建表单后,我将带有表单规范的 POST 请求发送到我正在尝试构建的静态站点生成器服务( SSGS )。JSON 有效负载如下所示:
{
"formId": 1,
"questions": [
{
"questionNo": 0,
"type": "rating",
"title": "How much do you like the taste of toothpaste?"
},
/* ... more questions may exist ... */
]
}
我们的想法是让 SSGS 从这个表单创建一个独立的静态网站,并且只创建这个表单。我打算将生成的单个站点存储在 S3 存储桶中。每种形式最终都会以个体的形式出现,与其他现有形式无关。
为什么是这种方法,而不是每个表单都有一条路线的单一服务?我将在功能有限的设备上显示这些表单。目的是让设备一次下载整个站点及其资产,然后将其显示给用户。
到目前为止我所拥有的
我正在使用 Vue 来显示表单的问题和输入。我有一个正在运行的 Nuxt.js 应用程序,它可以接受 POST 请求并将其有效负载传递给 Vue 组件,该组件可以很好地呈现每个问题。生成的 HTML 文档作为对发起它的 HTTP POST 请求的响应被发回。简而言之:
- 用户创建表单
- 表单服务发送一个带有 JSON 正文的 POST 请求,描述创建的表单
- SSGS 根据表单描述呈现 HTML 文档
- 表单服务接收所述 HTML 文档
- (未实现)表单服务在 S3 中存储 HTML 文档
我在这里遇到的问题是 Nuxt 创建的 HTML 文档有大量对外部文件的引用。当表单服务收到此 HTML 文档作为响应时,这些链接文件都不可访问。
<link rel="preload" href="/_nuxt/runtime.js" as="script">
<link rel="preload" href="/_nuxt/commons/app.js" as="script">
<link rel="preload" href="/_nuxt/vendors/app.js" as="script">
<link rel="preload" href="/_nuxt/app.js" as="script">
<link rel="preload" href="/_nuxt/pages/index.js" as="script">
我一直在寻找方法来告诉 Nuxt 将每个文件的内容写入<body>
生成的 HTML 文档中,但到目前为止我在这方面没有运气。
但这并不是真正的静态站点生成,是吗?
老实说,我还在纠结这个概念。我正在服务器上呈现一个页面,但我将其作为对请求的响应,就像任何传统服务器在响应浏览器的 GET 请求时所做的那样。这只是服务器端渲染,对吧?由于链接文件的问题,我担心这可能还不够。
我知道 Nuxt 可以选择生成真正的静态站点。它的完成方式是(显然):
npm run generate
在终端运行dist
使用所有必需的 HTML 文件和资产创建一个文件夹- 此文件夹将手动部署到某处
这种方法可能会给我我想要存储在 S3 中的确切内容。然而,它似乎是为了一遍又一遍地手动生成同一个站点,给我留下了很多问题:
- 每次 SSGS 收到 POST 请求时,如何触发新站点的生成?
- 如何将自定义 JSON 有效负载传递给呈现站点的 Vue 模板?
- 我应该如何管理每一代的输出?每个表格都是独一无二的——在处理之前我无法覆盖前一个表格。
dist
我可以直接将它们发送到 S3,而不是将文件保存在目录中吗?
我唯一的选择是围绕静态生成器创建某种包装服务,该服务能够运行 shell 命令来触发npm run generate
、随机播放dist
周围的内容并将数据移动到 S3?
是否有更好的工具可以根据需要从动态内容创建静态站点?
解决方案
推荐阅读
- python - BeautifulSoup 导致内存泄漏超时
- python - “从模块导入类”从同一模块导入其他类
- flutter - 显示 null 的日期时间值
- postgresql - 奇怪的“数据已更改”问题
- python - 创建带条件的二进制变量
- javascript - D3js 使用 Internet Explorer 11 有什么问题
- python - How to add row name to cell in pandas dataframe?
- json - 不是 JSON 或 YMAL。这是什么数据格式?
- flutter - 如何将代码分成小块以使代码更清晰
- python - 我可以将输入定位在python中的字符串内吗?