Setup eleventy serverless

This commit is contained in:
Sam Carlton 2021-07-24 13:31:28 -05:00
parent 6b2a827a11
commit f839b829f4
5 changed files with 109 additions and 81 deletions

View file

@ -33,6 +33,8 @@ import { transformSync } from 'esbuild'
import nuxtConfig from './nuxt.config'
const { EleventyServerlessBundlerPlugin } = require("@11ty/eleventy");
// Setup dotenv
dotenv.config()
@ -173,6 +175,11 @@ module.exports = function ( eleventyConfig ) {
})
eleventyConfig.addPlugin(EleventyServerlessBundlerPlugin, {
name: "eleventy-builder", // The serverless function name from your permalink object
functionsDir: "./netlify/functions/",
})
return {
// https://www.11ty.dev/docs/config/#template-formats

2
.gitignore vendored
View file

@ -88,3 +88,5 @@ dist
/commits-data.json
.DS_Store
/static/tailwind.css
netlify/functions/eleventy-builder/**
!netlify/functions/eleventy-builder/index.js

View file

@ -3,49 +3,38 @@
command = "npm run generate --quiet"
functions = "netlify/functions/"
[build.environment]
[build.environment]
NPM_FLAGS = "--no-optional"
CI = "1"
# https://docs.netlify.com/configure-builds/file-based-configuration/#redirects
[[redirects]]
from = "/app/*"
from = "/app/:slug"
to = "/.netlify/functions/eleventy-builder"
status = 200
force = true
_generated_by_eleventy_serverless = "serverless"
# old node redirect
[[redirects]]
from = "/app/node"
to = "/app/nodejs"
status = 301
# old git redirect
[[redirects]]
from = "/app/git"
to = "/app/git-version-control"
status = 301
# old electron redirect
[[redirects]]
from = "/app/electron"
to = "/app/electron-framework"
status = 301
# imac redirect
[[redirects]]
from = "/device/apple-silicon-imac"
to = "/device/m1-imac/"
status = 307
# Category Redirects
[[redirects]]
from = "/kind/entertainment"
to = "/kind/entertainment-and-media-apps/"
@ -56,10 +45,6 @@
to = "/kind/photo-and-graphic-tools/"
status = 301
# Other Redirects
# Random broken link from Chinese sites
[[redirects]]
from = "/。"
to = "/"

View file

@ -1,20 +0,0 @@
const { builder } = require("@netlify/functions")
async function myfunction(event, context) {
return {
statusCode: 200,
headers: {
"Content-Type": "text/html",
},
body: `
<!DOCTYPE html>
<html>
<body>
Hello World
</body>
</html>
`,
}
}
exports.handler = builder(myfunction);

View file

@ -0,0 +1,54 @@
const { EleventyServerless } = require("@11ty/eleventy");
// Explicit dependencies for the bundler from config file and global data.
// The file is generated by the Eleventy Serverless Bundler Plugin.
require("./eleventy-bundler-modules.js");
async function handler(event) {
console.log('event.path', event.path)
let elev = new EleventyServerless("eleventy-builder", {
path: event.path,
query: event.queryStringParameters,
inputDir: ".",
functionsDir: "./netlify/functions/",
});
try {
return {
statusCode: 200,
headers: {
"Content-Type": "text/html; charset=UTF-8",
},
body: await elev.render(),
};
} catch (error) {
// Only console log for matching serverless paths
// (otherwise youll see a bunch of BrowserSync 404s for non-dynamic URLs during --serve)
if (elev.isServerlessUrl(event.path)) {
console.log("Serverless Error:", error);
}
return {
statusCode: error.httpStatusCode || 500,
body: JSON.stringify(
{
error: error.message,
},
null,
2
),
};
}
}
// Choose one:
// * Runs on each request: AWS Lambda (or Netlify Function)
// * Runs on first request only: Netlify On-demand Builder
// (dont forget to `npm install @netlify/functions`)
// exports.handler = handler;
const { builder } = require("@netlify/functions");
exports.handler = builder(handler);