mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-13 23:16:47 +00:00
兼容适配 NextJS14.2.4
This commit is contained in:
@@ -545,7 +545,7 @@ const BLOG = {
|
||||
process.env.ENABLE_CACHE ||
|
||||
process.env.npm_lifecycle_event === 'build' ||
|
||||
process.env.npm_lifecycle_event === 'export', // 在打包过程中默认开启缓存,开发或运行时开启此功能意义不大。
|
||||
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)
|
||||
isProd: process.env.VERCEL_ENV === 'production' || process.env.EXPORT, // 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)
|
||||
BUNDLE_ANALYZER: process.env.ANALYZE === 'true' || false, // 是否展示编译依赖内容与大小
|
||||
VERSION: process.env.NEXT_PUBLIC_VERSION // 版本号
|
||||
}
|
||||
|
||||
172
next.config.js
172
next.config.js
@@ -53,7 +53,20 @@ function scanSubdirectories(directory) {
|
||||
return subdirectories
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {import('next').NextConfig}
|
||||
*/
|
||||
|
||||
const nextConfig = {
|
||||
output: process.env.EXPORT ? 'export' : undefined,
|
||||
// 多语言, 在export时禁用
|
||||
i18n: process.env.EXPORT
|
||||
? undefined
|
||||
: {
|
||||
defaultLocale: BLOG.LANG.slice(0, 2),
|
||||
// 支持的所有多语言,按需填写即可
|
||||
locales
|
||||
},
|
||||
images: {
|
||||
// 图片压缩
|
||||
formats: ['image/avif', 'image/webp'],
|
||||
@@ -71,90 +84,87 @@ const nextConfig = {
|
||||
},
|
||||
|
||||
// 默认将feed重定向至 /public/rss/feed.xml
|
||||
async redirects() {
|
||||
return [
|
||||
{
|
||||
source: '/feed',
|
||||
destination: '/rss/feed.xml',
|
||||
permanent: true
|
||||
}
|
||||
]
|
||||
},
|
||||
// 多语言, 在export时禁用
|
||||
i18n:
|
||||
process.env.npm_lifecycle_event === 'export'
|
||||
? undefined
|
||||
: {
|
||||
defaultLocale: BLOG.LANG.slice(0, 2),
|
||||
// 支持的所有多语言,按需填写即可
|
||||
locales
|
||||
},
|
||||
// 重写url
|
||||
async rewrites() {
|
||||
// 处理多语言重定向
|
||||
const langsRewrites = []
|
||||
if (BLOG.NOTION_PAGE_ID.indexOf(',') > 0) {
|
||||
const siteIds = BLOG.NOTION_PAGE_ID.split(',')
|
||||
const langs = []
|
||||
for (let index = 0; index < siteIds.length; index++) {
|
||||
const siteId = siteIds[index]
|
||||
const prefix = extractLangPrefix(siteId)
|
||||
// 如果包含前缀 例如 zh , en 等
|
||||
if (prefix) {
|
||||
langs.push(prefix)
|
||||
}
|
||||
console.log('[Locales]', siteId)
|
||||
}
|
||||
|
||||
// 映射多语言
|
||||
// 示例: source: '/:locale(zh|en)/:path*' ; :locale() 会将语言放入重写后的 `?locale=` 中。
|
||||
langsRewrites.push(
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})/:path*`,
|
||||
destination: '/:path*'
|
||||
},
|
||||
// 匹配没有路径的情况,例如 [domain]/zh 或 [domain]/en
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})`,
|
||||
destination: '/'
|
||||
},
|
||||
// 匹配没有路径的情况,例如 [domain]/zh/ 或 [domain]/en/
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})/`,
|
||||
destination: '/'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
return [
|
||||
...langsRewrites,
|
||||
// 伪静态重写
|
||||
{
|
||||
source: '/:path*.html',
|
||||
destination: '/:path*'
|
||||
}
|
||||
]
|
||||
},
|
||||
async headers() {
|
||||
return [
|
||||
{
|
||||
source: '/:path*{/}?',
|
||||
headers: [
|
||||
{ key: 'Access-Control-Allow-Credentials', value: 'true' },
|
||||
{ key: 'Access-Control-Allow-Origin', value: '*' },
|
||||
redirects: process.env.EXPORT
|
||||
? undefined
|
||||
: async () => {
|
||||
return [
|
||||
{
|
||||
key: 'Access-Control-Allow-Methods',
|
||||
value: 'GET,OPTIONS,PATCH,DELETE,POST,PUT'
|
||||
},
|
||||
{
|
||||
key: 'Access-Control-Allow-Headers',
|
||||
value:
|
||||
'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'
|
||||
source: '/feed',
|
||||
destination: '/rss/feed.xml',
|
||||
permanent: true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
// 重写url
|
||||
rewrites: process.env.EXPORT
|
||||
? undefined
|
||||
: async () => {
|
||||
// 处理多语言重定向
|
||||
const langsRewrites = []
|
||||
if (BLOG.NOTION_PAGE_ID.indexOf(',') > 0) {
|
||||
const siteIds = BLOG.NOTION_PAGE_ID.split(',')
|
||||
const langs = []
|
||||
for (let index = 0; index < siteIds.length; index++) {
|
||||
const siteId = siteIds[index]
|
||||
const prefix = extractLangPrefix(siteId)
|
||||
// 如果包含前缀 例如 zh , en 等
|
||||
if (prefix) {
|
||||
langs.push(prefix)
|
||||
}
|
||||
console.log('[Locales]', siteId)
|
||||
}
|
||||
|
||||
// 映射多语言
|
||||
// 示例: source: '/:locale(zh|en)/:path*' ; :locale() 会将语言放入重写后的 `?locale=` 中。
|
||||
langsRewrites.push(
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})/:path*`,
|
||||
destination: '/:path*'
|
||||
},
|
||||
// 匹配没有路径的情况,例如 [domain]/zh 或 [domain]/en
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})`,
|
||||
destination: '/'
|
||||
},
|
||||
// 匹配没有路径的情况,例如 [domain]/zh/ 或 [domain]/en/
|
||||
{
|
||||
source: `/:locale(${langs.join('|')})/`,
|
||||
destination: '/'
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
return [
|
||||
...langsRewrites,
|
||||
// 伪静态重写
|
||||
{
|
||||
source: '/:path*.html',
|
||||
destination: '/:path*'
|
||||
}
|
||||
]
|
||||
},
|
||||
headers: process.env.EXPORT
|
||||
? undefined
|
||||
: async () => {
|
||||
return [
|
||||
{
|
||||
source: '/:path*{/}?',
|
||||
headers: [
|
||||
{ key: 'Access-Control-Allow-Credentials', value: 'true' },
|
||||
{ key: 'Access-Control-Allow-Origin', value: '*' },
|
||||
{
|
||||
key: 'Access-Control-Allow-Methods',
|
||||
value: 'GET,OPTIONS,PATCH,DELETE,POST,PUT'
|
||||
},
|
||||
{
|
||||
key: 'Access-Control-Allow-Headers',
|
||||
value:
|
||||
'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
webpack: (config, { dev, isServer }) => {
|
||||
// 动态主题:添加 resolve.alias 配置,将动态路径映射到实际路径
|
||||
if (!isServer) {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"post-build": "next-sitemap --config next-sitemap.config.js",
|
||||
"export": "next build && next-sitemap --config next-sitemap.config.js && next export",
|
||||
"export": "cross-env EXPORT=true next build && next-sitemap --config next-sitemap.config.js",
|
||||
"bundle-report": "cross-env ANALYZE=true next build",
|
||||
"build-all-in-dev": "cross-env VERCEL_ENV=production next build"
|
||||
},
|
||||
|
||||
@@ -83,11 +83,13 @@ export async function getStaticProps({
|
||||
props.post = null
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,11 +124,13 @@ export async function getStaticProps({
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,11 +72,13 @@ export async function getStaticProps({ params: { prefix, slug }, locale }) {
|
||||
props.post = null
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,11 +113,13 @@ export async function getStaticProps({ params: { prefix, slug }, locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -151,11 +151,13 @@ export async function getStaticProps({ params: { prefix }, locale }) {
|
||||
props.post = null
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,11 +193,13 @@ export async function getStaticProps({ params: { prefix }, locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,11 +61,13 @@ export async function getStaticProps({ locale }) {
|
||||
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,11 +49,13 @@ export async function getStaticProps({ params: { category }, locale }) {
|
||||
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,11 +44,13 @@ export async function getStaticProps({ params: { category, page } }) {
|
||||
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,12 @@ export async function getStaticProps({ locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,11 +69,13 @@ export async function getStaticProps(req) {
|
||||
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,11 +69,13 @@ export async function getStaticProps({ params: { page } }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,11 +47,13 @@ export async function getStaticProps({ params: { keyword }, locale }) {
|
||||
props.keyword = keyword
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,11 +45,13 @@ export async function getStaticProps({ params: { keyword, page }, locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,11 +54,13 @@ export async function getStaticProps({ locale }) {
|
||||
)
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,11 +27,13 @@ export async function getStaticProps(req) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,11 +27,13 @@ export async function getStaticProps(req) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,11 +45,13 @@ export async function getStaticProps({ params: { tag }, locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,11 +34,13 @@ export async function getStaticProps({ params: { tag, page }, locale }) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,11 +26,13 @@ export async function getStaticProps(req) {
|
||||
delete props.allPages
|
||||
return {
|
||||
props,
|
||||
revalidate: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
revalidate: process.env.EXPORT
|
||||
? undefined
|
||||
: siteConfig(
|
||||
'NEXT_REVALIDATE_SECOND',
|
||||
BLOG.NEXT_REVALIDATE_SECOND,
|
||||
props.NOTION_CONFIG
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user