From 928585cbf2de2f9e1052ea22471704d4659edb59 Mon Sep 17 00:00:00 2001 From: tangly1024 Date: Wed, 7 Dec 2022 12:52:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=AA=E9=9D=99=E6=80=81&=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blog.config.js | 4 +- lib/notion/getNotionData.js | 3 +- lib/notion/getPageProperties.js | 49 ++++++++++++++---------- pages/[...slug].js | 12 +++--- pages/archive/index.js | 3 +- pages/category/[category]/index.js | 2 +- pages/category/[category]/page/[page].js | 2 +- pages/category/index.js | 3 +- pages/index.js | 2 +- pages/page/[page].js | 2 +- pages/search/[keyword]/index.js | 2 +- pages/search/[keyword]/page/[page].js | 2 +- pages/search/index.js | 3 +- pages/tag/[tag]/page/[page].js | 2 +- 14 files changed, 52 insertions(+), 39 deletions(-) diff --git a/blog.config.js b/blog.config.js index 2e5028e1..c1769949 100644 --- a/blog.config.js +++ b/blog.config.js @@ -59,7 +59,6 @@ const BLOG = { CONTACT_TELEGRAM: 'https://t.me/tangly_1024', // 你的telegram 地址 例如 https://t.me/tangly_1024 CONTACT_LINKEDIN: '', // 你的linkedIn 首页 - // 鼠标点击烟花特效 FIREWORKS: process.env.NEXT_PUBLIC_FIREWORKS || false, // 鼠标点击烟花特效 @@ -161,6 +160,9 @@ const BLOG = { DESCRIPTION: process.env.NEXT_PUBLIC_DESCRIPTION || '这是一个由NotionNext生成的站点', // 站点描述,被notion中的页面描述覆盖 + PSEUDO_STATIC: true, // 伪静态路径,开启后所有文章URL都以 .html 结尾。 + NEXT_REVALIDATE_SECOND: 5, // 刷新页面的时间间隔 单位 秒 + isProd: process.env.VERCEL_ENV === 'production', // distinguish between development and production environment (ref: https://vercel.com/docs/environment-variables#system-environment-variables) isProd: process.env.VERCEL_ENV === 'production' // distinguish between development and production environment (ref: https://vercel.com/docs/environment-variables#system-environment-variables) VERSION: process.env.NEXT_PUBLIC_VERSION // 版本号 } diff --git a/lib/notion/getNotionData.js b/lib/notion/getNotionData.js index 3da64da3..d76499b8 100644 --- a/lib/notion/getNotionData.js +++ b/lib/notion/getNotionData.js @@ -224,8 +224,7 @@ async function getPageRecordMapByNotionAPI({ pageId, from }) { post.type && (post.type === 'Post' || post.type === 'Page') && (post.status === 'Published' || post.status === 'Invisible') - } - ) + }) // Sort by date if (BLOG.POSTS_SORT_BY === 'date') { diff --git a/lib/notion/getPageProperties.js b/lib/notion/getPageProperties.js index 1eced850..7c1cdb4f 100644 --- a/lib/notion/getPageProperties.js +++ b/lib/notion/getPageProperties.js @@ -76,6 +76,13 @@ export default async function getPageProperties(id, block, schema, authToken, ta properties.slug = (properties.slug ?? properties.id) } + // 开启伪静态路径 + if (BLOG.PSEUDO_STATIC) { + if (!properties.slug.endsWith('.html')) { + properties.slug += '.html' + } + } + properties.createdTime = formatDate(new Date(value.created_time).toString(), BLOG.LANG) properties.lastEditedTime = formatDate(new Date(value?.last_edited_time).toString(), BLOG.LANG) properties.fullWidth = value.format?.page_full_width ?? false @@ -87,25 +94,25 @@ export default async function getPageProperties(id, block, schema, authToken, ta }) || [] delete properties.content return properties - - // 从Block获取封面图;优先取PageCover,否则取内容图片 - function getImageUrl(imgObj, blockVal) { - if (!imgObj) { - return null - } - if (imgObj.startsWith('/')) { - return 'https://www.notion.so' + imgObj // notion内部图片转相对路径为绝对路径 - } - - if (imgObj.startsWith('http')) { - // 判断如果是notion上传的图片要拼接访问token - const u = new URL(imgObj) - if (u.pathname.startsWith('/secure.notion-static.com') && u.hostname.endsWith('.amazonaws.com')) { - return defaultMapImageUrl(imgObj, blockVal) // notion上传的图片需要转换请求地址 - } - } - - // 其他图片链接 或 emoji - return imgObj - } +} + +// 从Block获取封面图;优先取PageCover,否则取内容图片 +function getImageUrl(imgObj, blockVal) { + if (!imgObj) { + return null + } + if (imgObj.startsWith('/')) { + return 'https://www.notion.so' + imgObj // notion内部图片转相对路径为绝对路径 + } + + if (imgObj.startsWith('http')) { + // 判断如果是notion上传的图片要拼接访问token + const u = new URL(imgObj) + if (u.pathname.startsWith('/secure.notion-static.com') && u.hostname.endsWith('.amazonaws.com')) { + return defaultMapImageUrl(imgObj, blockVal) // notion上传的图片需要转换请求地址 + } + } + + // 其他图片链接 或 emoji + return imgObj } diff --git a/pages/[...slug].js b/pages/[...slug].js index 997297e7..fc1541ae 100644 --- a/pages/[...slug].js +++ b/pages/[...slug].js @@ -95,8 +95,10 @@ export async function getStaticPaths() { } export async function getStaticProps({ params: { slug } }) { - // slug 是个数组 - const fullSlug = slug.join('/') + let fullSlug = slug.join('/') + if (BLOG.PSEUDO_STATIC) { + fullSlug += '.html' + } const from = `slug-props-${fullSlug}` const props = await getGlobalNotionData({ from }) props.post = props.allPages.find((p) => { @@ -106,13 +108,13 @@ export async function getStaticProps({ params: { slug } }) { if (!props.post) { const pageId = slug.slice(-1)[0] if (pageId.length < 32) { - return { props, revalidate: 1 } + return { props, revalidate: BLOG.NEXT_REVALIDATE_SECOND } } const post = await getNotion(pageId) if (post) { props.post = post } else { - return { props, revalidate: 1 } + return { props, revalidate: BLOG.NEXT_REVALIDATE_SECOND } } } else { props.post.blockMap = await getPostBlocks(props.post.id, 'slug') @@ -130,7 +132,7 @@ export async function getStaticProps({ params: { slug } }) { delete props.allPages return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/archive/index.js b/pages/archive/index.js index 6e8f115a..f60d9f77 100644 --- a/pages/archive/index.js +++ b/pages/archive/index.js @@ -2,6 +2,7 @@ import { getGlobalNotionData } from '@/lib/notion/getNotionData' import React from 'react' import { useGlobal } from '@/lib/global' import * as ThemeMap from '@/themes' +import BLOG from '@/blog.config' const ArchiveIndex = props => { const { theme, locale } = useGlobal() @@ -26,7 +27,7 @@ export async function getStaticProps() { return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/category/[category]/index.js b/pages/category/[category]/index.js index a6c4f1af..363b97a0 100644 --- a/pages/category/[category]/index.js +++ b/pages/category/[category]/index.js @@ -52,7 +52,7 @@ export async function getStaticProps({ params: { category } }) { return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/category/[category]/page/[page].js b/pages/category/[category]/page/[page].js index 122d48f5..3360cd70 100644 --- a/pages/category/[category]/page/[page].js +++ b/pages/category/[category]/page/[page].js @@ -47,7 +47,7 @@ export async function getStaticProps({ params: { category, page } }) { return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/category/index.js b/pages/category/index.js index bb219bb5..f06f4bb0 100644 --- a/pages/category/index.js +++ b/pages/category/index.js @@ -3,6 +3,7 @@ import React from 'react' import { useGlobal } from '@/lib/global' import * as ThemeMap from '@/themes' import { getAllCategories } from '@/lib/notion/getAllCategories' +import BLOG from '@/blog.config' /** * 分类首页 @@ -30,6 +31,6 @@ export async function getStaticProps() { delete props.categoryOptions return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/index.js b/pages/index.js index 067b9a32..b985b7ef 100644 --- a/pages/index.js +++ b/pages/index.js @@ -44,7 +44,7 @@ export async function getStaticProps() { meta, ...props }, - revalidate: 5 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/page/[page].js b/pages/page/[page].js index 3162250b..4a2ae8cc 100644 --- a/pages/page/[page].js +++ b/pages/page/[page].js @@ -56,7 +56,7 @@ export async function getStaticProps({ params: { page } }) { return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/search/[keyword]/index.js b/pages/search/[keyword]/index.js index f26b77ea..aa163d3a 100644 --- a/pages/search/[keyword]/index.js +++ b/pages/search/[keyword]/index.js @@ -48,7 +48,7 @@ export async function getStaticProps({ params: { keyword } }) { props.keyword = keyword return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/search/[keyword]/page/[page].js b/pages/search/[keyword]/page/[page].js index 6d4cf070..92b14f75 100644 --- a/pages/search/[keyword]/page/[page].js +++ b/pages/search/[keyword]/page/[page].js @@ -45,7 +45,7 @@ export async function getStaticProps({ params: { keyword, page } }) { props.page = page return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/search/index.js b/pages/search/index.js index d562d627..d7d000eb 100644 --- a/pages/search/index.js +++ b/pages/search/index.js @@ -2,6 +2,7 @@ import { getGlobalNotionData } from '@/lib/notion/getNotionData' import { useGlobal } from '@/lib/global' import { useRouter } from 'next/router' import * as ThemeMap from '@/themes' +import BLOG from '@/blog.config' const Search = props => { const { posts, siteInfo } = props @@ -58,7 +59,7 @@ export async function getStaticProps() { props.posts = allPosts return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } } diff --git a/pages/tag/[tag]/page/[page].js b/pages/tag/[tag]/page/[page].js index ffd2efb0..f62c2330 100644 --- a/pages/tag/[tag]/page/[page].js +++ b/pages/tag/[tag]/page/[page].js @@ -38,7 +38,7 @@ export async function getStaticProps({ params: { tag, page } }) { delete props.allPages return { props, - revalidate: 1 + revalidate: BLOG.NEXT_REVALIDATE_SECOND } }