Prefer local manifests for dashboard builds (#768)
This commit is contained in:
parent
25e1c13398
commit
1e66b6a3fe
@ -9,7 +9,6 @@ const nextConfig = {
|
||||
// 🚀 生产优化 —— 最关键的三行
|
||||
// ===============================
|
||||
output: "standalone", // 让 Next.js 生成可独立运行的最小产物(大幅减小 Docker 镜像)
|
||||
swcMinify: true, // 使用 Rust 压缩器(比 Terser 快 ~20x)
|
||||
compress: true, // Gzip 压缩输出(确保小体积网络传输)
|
||||
|
||||
// 配置允许的外部图片域名
|
||||
|
||||
@ -7,6 +7,8 @@ import { buildAbsoluteDocUrl } from './utils'
|
||||
import type { DocCollection, DocResource, DocVersionOption } from './types'
|
||||
|
||||
const DOCS_MANIFEST_URL = 'https://dl.svc.plus/dl-index/docs-manifest.json'
|
||||
const REMOTE_DOCS_ENABLED = process.env.ALLOW_REMOTE_DOCS_FETCH === 'true'
|
||||
const FALLBACK_DOCS_INDEX = Array.isArray(fallbackDocsIndex) ? (fallbackDocsIndex as RawDocResource[]) : []
|
||||
|
||||
interface RawDocResource {
|
||||
slug?: unknown
|
||||
@ -43,35 +45,44 @@ async function fetchDocs(options?: { useCache?: boolean }): Promise<RawDocResour
|
||||
const data = await response.json()
|
||||
return Array.isArray(data) ? (data as RawDocResource[]) : []
|
||||
} catch (error) {
|
||||
console.error('Error fetching docs manifest:', error)
|
||||
if (REMOTE_DOCS_ENABLED) {
|
||||
console.warn('Error fetching docs manifest:', error)
|
||||
}
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
async function loadDocs(options?: { useCache?: boolean }): Promise<RawDocResource[]> {
|
||||
if (!REMOTE_DOCS_ENABLED) {
|
||||
return FALLBACK_DOCS_INDEX
|
||||
}
|
||||
|
||||
const manifestDocs = await fetchDocs(options)
|
||||
|
||||
if (manifestDocs.length > 0) {
|
||||
return manifestDocs
|
||||
}
|
||||
|
||||
const fallbackDocs = Array.isArray(fallbackDocsIndex) ? (fallbackDocsIndex as RawDocResource[]) : []
|
||||
return fallbackDocs
|
||||
return FALLBACK_DOCS_INDEX
|
||||
}
|
||||
|
||||
// 构建时数据获取:优先使用本地 fallback,保证构建成功
|
||||
async function loadDocsForBuildTime(): Promise<RawDocResource[]> {
|
||||
// 构建时优先使用本地数据,避免外部API调用导致构建失败
|
||||
const fallbackDocs = Array.isArray(fallbackDocsIndex) ? (fallbackDocsIndex as RawDocResource[]) : []
|
||||
const fallbackDocs = FALLBACK_DOCS_INDEX
|
||||
|
||||
if (fallbackDocs.length > 0) {
|
||||
return fallbackDocs
|
||||
}
|
||||
|
||||
// fallback为空时,再尝试获取远程数据
|
||||
console.warn('Fallback docs not found, attempting to fetch remote docs manifest...')
|
||||
const manifestDocs = await fetchDocs({ useCache: true })
|
||||
return manifestDocs
|
||||
if (REMOTE_DOCS_ENABLED) {
|
||||
console.warn('Fallback docs not found, attempting to fetch remote docs manifest...')
|
||||
const manifestDocs = await fetchDocs({ useCache: true })
|
||||
return manifestDocs
|
||||
}
|
||||
|
||||
return []
|
||||
}
|
||||
|
||||
async function getRawDocs(): Promise<RawDocResource[]> {
|
||||
|
||||
@ -5,6 +5,10 @@ import fallbackArtifacts from '../../../public/_build/artifacts-manifest.json'
|
||||
|
||||
const ARTIFACTS_MANIFEST_URL = 'https://dl.svc.plus/dl-index/artifacts-manifest.json'
|
||||
const FALLBACK_LISTINGS_URL = 'https://dl.svc.plus/dl-index/offline-package-manifest.json'
|
||||
const REMOTE_ARTIFACTS_ENABLED = process.env.ALLOW_REMOTE_DL_FETCH === 'true'
|
||||
const LOCAL_FALLBACK_ARTIFACTS = Array.isArray(fallbackArtifacts)
|
||||
? (fallbackArtifacts as DirListing[])
|
||||
: []
|
||||
|
||||
async function fetchListings(url: string, useCache?: boolean): Promise<DirListing[]> {
|
||||
try {
|
||||
@ -20,31 +24,41 @@ async function fetchListings(url: string, useCache?: boolean): Promise<DirListin
|
||||
const data = await response.json()
|
||||
return Array.isArray(data) ? (data as DirListing[]) : []
|
||||
} catch (error) {
|
||||
console.error(`Error fetching from ${url}:`, error)
|
||||
if (REMOTE_ARTIFACTS_ENABLED) {
|
||||
console.warn(`Error fetching from ${url}:`, error)
|
||||
}
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
async function loadDownloadListings(options?: { useCache?: boolean }): Promise<DirListing[]> {
|
||||
const manifestListings = await fetchListings(ARTIFACTS_MANIFEST_URL, options?.useCache)
|
||||
if (!REMOTE_ARTIFACTS_ENABLED && LOCAL_FALLBACK_ARTIFACTS.length > 0) {
|
||||
return LOCAL_FALLBACK_ARTIFACTS
|
||||
}
|
||||
|
||||
const manifestListings = REMOTE_ARTIFACTS_ENABLED
|
||||
? await fetchListings(ARTIFACTS_MANIFEST_URL, options?.useCache)
|
||||
: []
|
||||
|
||||
if (manifestListings.length > 0) {
|
||||
return manifestListings
|
||||
}
|
||||
|
||||
const fallbackListings = await fetchListings(FALLBACK_LISTINGS_URL, options?.useCache)
|
||||
const fallbackListings = REMOTE_ARTIFACTS_ENABLED
|
||||
? await fetchListings(FALLBACK_LISTINGS_URL, options?.useCache)
|
||||
: []
|
||||
if (fallbackListings.length > 0) {
|
||||
return fallbackListings
|
||||
}
|
||||
|
||||
// Last resort: use local fallback data
|
||||
return fallbackArtifacts as DirListing[]
|
||||
return LOCAL_FALLBACK_ARTIFACTS
|
||||
}
|
||||
|
||||
// 构建时数据获取:优先使用本地 fallback 数据
|
||||
async function loadDownloadListingsForBuildTime(): Promise<DirListing[]> {
|
||||
// 构建时优先使用本地数据,避免外部API调用导致构建失败
|
||||
const localFallback = fallbackArtifacts as DirListing[]
|
||||
const localFallback = LOCAL_FALLBACK_ARTIFACTS
|
||||
|
||||
if (localFallback.length > 0) {
|
||||
return localFallback
|
||||
|
||||
Loading…
Reference in New Issue
Block a user