diff --git a/.eleventy.js b/.eleventy.js index bf7c4bc..016fe39 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -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 diff --git a/.gitignore b/.gitignore index 03f5912..58c3c65 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,5 @@ dist /commits-data.json .DS_Store /static/tailwind.css +netlify/functions/eleventy-builder/** +!netlify/functions/eleventy-builder/index.js diff --git a/netlify.toml b/netlify.toml index 1161f1a..12611b5 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,71 +1,56 @@ [build] - publish = "dist/" - command = "npm run generate --quiet" - functions = "netlify/functions/" + publish = "dist/" + command = "npm run generate --quiet" + functions = "netlify/functions/" + [build.environment] + NPM_FLAGS = "--no-optional" + CI = "1" - -[build.environment] - NPM_FLAGS = "--no-optional" - CI = "1" - - -# https://docs.netlify.com/configure-builds/file-based-configuration/#redirects +[[redirects]] + from = "/app/:slug" + to = "/.netlify/functions/eleventy-builder" + status = 200 + force = true + _generated_by_eleventy_serverless = "serverless" [[redirects]] - from = "/app/*" - to = "/.netlify/functions/eleventy-builder" - status = 200 - force = true - -# 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/" - status = 301 + from = "/app/node" + to = "/app/nodejs" + status = 301 [[redirects]] - from = "/kind/photo-tools" - to = "/kind/photo-and-graphic-tools/" - status = 301 - - -# Other Redirects - -# Random broken link from Chinese sites -[[redirects]] - from = "/。" - to = "/" - status = 301 + from = "/app/git" + to = "/app/git-version-control" + status = 301 [[redirects]] - from = "/%E3%80%82" - to = "/" - status = 301 + from = "/app/electron" + to = "/app/electron-framework" + status = 301 + +[[redirects]] + from = "/device/apple-silicon-imac" + to = "/device/m1-imac/" + status = 307 + +[[redirects]] + from = "/kind/entertainment" + to = "/kind/entertainment-and-media-apps/" + status = 301 + +[[redirects]] + from = "/kind/photo-tools" + to = "/kind/photo-and-graphic-tools/" + status = 301 + +[[redirects]] + from = "/。" + to = "/" + status = 301 + +[[redirects]] + from = "/%E3%80%82" + to = "/" + status = 301 diff --git a/netlify/functions/eleventy-builder/eleventy-builder.js b/netlify/functions/eleventy-builder/eleventy-builder.js deleted file mode 100644 index 0b4434f..0000000 --- a/netlify/functions/eleventy-builder/eleventy-builder.js +++ /dev/null @@ -1,20 +0,0 @@ -const { builder } = require("@netlify/functions") - -async function myfunction(event, context) { - return { - statusCode: 200, - headers: { - "Content-Type": "text/html", - }, - body: ` - - - - Hello World - - - `, - } -} - -exports.handler = builder(myfunction); diff --git a/netlify/functions/eleventy-builder/index.js b/netlify/functions/eleventy-builder/index.js new file mode 100644 index 0000000..557f4ad --- /dev/null +++ b/netlify/functions/eleventy-builder/index.js @@ -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 you’ll 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 +// (don’t forget to `npm install @netlify/functions`) + +// exports.handler = handler; + +const { builder } = require("@netlify/functions"); +exports.handler = builder(handler);