无服务器/无状态环境中的Gatsby预览服务器



Gatsby有关于如何在此处设置预览服务器的文档

问题是,它需要一个全天候运行的服务器来监听请求,我想实现同样的结果,但在无服务器设置中(更具体地说是AWS Lambda(,因为我们很少需要预览。

这里的上下文是使用Gatsby和Wordpress作为无头数据后端,我想在Wordpress中实现一个自定义预览链接,用于在发布帖子之前预览帖子。

到目前为止,主要有两个挫折:

  1. 大小,目前Gatsby入门版Wordpress的node_modules大小为570mb
  2. 快速、无状态意味着每个预览请求都将再次运行gatsby develop

老实说,我不知道这里的尺寸解决方案,也不知道如何去掉包装。

至于速度,也许有一个低级的Gatsby API函数可以直接将页面呈现为HTML?例如,Node.js的Lambda代码可能是这样的(buildPageHTML是我试图找到的一个假设函数(

import buildPageHTML from "gatsby"
exports.handler = async function(event) {
const postID = event.queryStringParameters.postID
return buildPageHTML(`/preview_post_by_id/${postID}`)
}

有什么想法吗?

在AWS Lambda中运行盖茨比

试试这个lamba(来自这个美丽的教程(:

import { Context } from 'aws-lambda';
import { link } from 'linkfs';
import mock from 'mock-require';
import fs from 'fs';
import { tmpdir } from 'os';
import { runtimeRequire } from '@/utility/runtimeRequire.utility';
import { deployFiles } from '@/utility/deployFiles.utility';
/* -----------------------------------
*
* Variables
*
* -------------------------------- */
const tmpDir = tmpdir();
/* -----------------------------------
*
* Gatsby
*
* -------------------------------- */
function invokeGatsby(context: Context) {
const gatsby = runtimeRequire('gatsby/dist/commands/build');
gatsby({
directory: __dirname,
verbose: false,
browserslist: ['>0.25%', 'not dead'],
sitePackageJson: runtimeRequire('./package.json'),
})
.then(deployFiles)
.then(context.succeed)
.catch(context.fail);
}
/* -----------------------------------
*
* Output
*
* -------------------------------- */
function rewriteFs() {
const linkedFs = link(fs, [
[`${__dirname}/.cache`, `${tmpDir}/.cache`],
[`${__dirname}/public`, `${tmpDir}/public`],
]);
linkedFs.ReadStream = fs.ReadStream;
linkedFs.WriteStream = fs.WriteStream;
mock('fs', linkedFs);
}
/* -----------------------------------
*
* Handler
*
* -------------------------------- */
exports.handler = (event: any, context: Context) => {
rewriteFs();
invokeGatsby(context);
};

在这里找到来源

相关内容

最新更新