Skip to content

Commit df6ee64

Browse files
committed
feat: 修改获取信息逻辑,改为缓存文件获取
1 parent fc87921 commit df6ee64

File tree

10 files changed

+165
-67
lines changed

10 files changed

+165
-67
lines changed

markdown/index.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
[
2-
{
3-
"authors": ["yy"],
4-
"path": "yyblog.md",
5-
"title": "yyblog",
6-
"tag": "技术/react",
7-
"coverImage": "https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b76076eab124179816d68b846280cdc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgTWVnYXRyb25LaW5n:q75.awebp?rk3s=f64ab15b&x-expires=1731736114&x-signature=3ggdE9od5WvMZaVJ7VFlQtt48rA%3D"
8-
},
9-
{
10-
"authors": ["yy"],
11-
"path": "react19.md",
12-
"title": "react19",
13-
"tag": "随笔/生活",
14-
"summary": "这篇文章记录了react19相关的一些内容",
15-
"coverImage": "https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b76076eab124179816d68b846280cdc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgTWVnYXRyb25LaW5n:q75.awebp?rk3s=f64ab15b&x-expires=1731736114&x-signature=3ggdE9od5WvMZaVJ7VFlQtt48rA%3D"
16-
}
17-
]
2+
{
3+
"authors": ["yy"],
4+
"path": "yyblog.md",
5+
"title": "yyblog",
6+
"tag": "技术/react",
7+
"coverImage": "https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b76076eab124179816d68b846280cdc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgTWVnYXRyb25LaW5n:q75.awebp?rk3s=f64ab15b&x-expires=1731736114&x-signature=3ggdE9od5WvMZaVJ7VFlQtt48rA%3D"
8+
},
9+
{
10+
"authors": ["yy"],
11+
"path": "react19.md",
12+
"title": "react19",
13+
"tag": "随笔/生活",
14+
"summary": "这篇文章记录了react19相关的一些内容",
15+
"coverImage": "https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b76076eab124179816d68b846280cdc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgTWVnYXRyb25LaW5n:q75.awebp?rk3s=f64ab15b&x-expires=1731736114&x-signature=3ggdE9od5WvMZaVJ7VFlQtt48rA%3D"
16+
}
17+
]

markdown/output.json

Lines changed: 72 additions & 0 deletions
Large diffs are not rendered by default.

src/app/(app)/(home)/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { buildPostData } from '@/core';
1+
import { getPostData } from '@/core';
22
import { FocusCards } from '@/components/ui/focus-cards.tsx';
33
import { Hero } from '@/components/modules/home/Hero';
44
import { WindVane } from '@/components/modules/home/WindVane/WindVane';
55

6-
const { postDataList } = buildPostData();
6+
const { postDataList } = await getPostData();
77

88
export default function Home() {
99
return (

src/app/(app)/list/page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import { Metadata } from 'next';
44
import AnimatedPostItem from './AnimatedPostItem';
55

66
import { NormalContainer } from '@/components/layout/container/Normal';
7-
import { buildPostData } from '@/core';
7+
import { getPostData } from '@/core';
88

99
export const metadata: Metadata = {
1010
title: '文稿',
1111
description: '文章列表',
1212
};
1313

14-
const ArticleList: React.FC = () => {
15-
const { postDataList } = buildPostData();
14+
const ArticleList: React.FC = async () => {
15+
const { postDataList } = await getPostData();
1616

1717
return (
1818
<NormalContainer>

src/app/(app)/notes/[nid]/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import {
1111
PageTransition,
1212
} from './pageExtra';
1313

14-
import { type PostItem as PostItemType, buildPostData } from '@/core';
14+
import { type PostItem as PostItemType, getPostData } from '@/core';
1515
import { LayoutRightSidePortal } from '@/providers/shared/LayoutRightSideProvider';
1616
import { ArticleRightAside } from '@/components/modules/shared/ArticleRightAside';
1717
import { Signature } from '@/components/modules/shared/signature';
1818

19-
const { postDataMap } = buildPostData();
19+
const { postDataMap } = await getPostData();
2020

2121
export type PageInnerProps = { postData: PostItemType };
2222

src/app/feed.xml/route.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import RSS from 'rss';
22
import { compiler } from 'markdown-to-jsx';
33

44
import { siteUrl, seo } from '~/seo';
5-
import { buildPostData } from '@/core';
5+
import { getPostData } from '@/core';
66

7-
const { postDataList } = buildPostData();
7+
const { postDataList } = await getPostData();
88

99
export async function GET() {
1010
const ReactDOM = (await import('react-dom/server')).default;

src/app/sitemap.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { MetadataRoute } from 'next';
22

33
import { siteUrl } from '~/seo';
4-
import { buildPostData } from '@/core';
4+
import { getPostData } from '@/core';
55

6-
const { postDataList } = buildPostData();
6+
const { postDataList } = await getPostData();
77

88
export default function sitemap(): MetadataRoute.Sitemap {
99
const postSitemap = postDataList.map((post) => ({

src/components/layout/Header/Header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { HeaderMeta } from './HeaderMeta';
1010
import { HeaderDrawerButton } from './HeaderDrawerButton';
1111

1212
import { cn } from '@/lib/helper';
13-
import { buildPostData } from '@/core';
13+
import { getPostData } from '@/core';
1414

15-
const { postDataMap } = buildPostData();
15+
const { postDataMap } = await getPostData();
1616

1717
const Header = () => {
1818
return (

src/core/index.ts

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import jsonData from '@md/index.json';
22
import { join } from 'node:path';
3+
import { existsSync, writeFileSync } from 'node:fs';
34

45
import { symbolsTime, symbolsCount } from '@/lib/count';
56
import { getFirstGitCommitTime, getLastGitUpdateTime } from '@/lib/git';
@@ -28,58 +29,83 @@ export type PostJsonType = {
2829
coverImage: string;
2930
summary?: string;
3031
};
32+
3133
export type PostMap = Record<string, PostItem>;
3234

3335
export function importMarkdownFile(path: string) {
34-
// 使用 require.context 获取所有 markdown 文件
3536
const markdownContext = (require as any).context('../../markdown', true, /\.md$/);
3637

3738
return markdownContext(path);
3839
}
3940

41+
export function importJsonFile(path: string) {
42+
const jsonContext = (require as any).context('../../markdown', true, /\.json$/);
43+
44+
return jsonContext(path);
45+
}
46+
47+
export function writeOutputFile(data: { postDataMap: PostMap; postDataList: PostItem[] }) {
48+
const outputContent = {
49+
postDataMap: data.postDataMap,
50+
postDataList: data.postDataList,
51+
};
52+
53+
const outputPath = join(process.cwd(), 'markdown/output.json');
54+
writeFileSync(outputPath, JSON.stringify(outputContent, null, 2));
55+
56+
console.log(`Data written to ${outputPath}`);
57+
}
58+
4059
export function buildPostData() {
4160
const postDataMap: PostMap = {};
4261
const postDataList: PostItem[] = [];
4362

44-
function processPostItem(item: PostJsonType) {
45-
const itemInfo = {} as PostItem;
46-
const file = importMarkdownFile(`./${item.path}`);
47-
itemInfo.authors = item.authors;
48-
itemInfo.title = item.title;
49-
itemInfo.tag = item.tag;
50-
itemInfo.path = item.path.replace('.md', '');
51-
itemInfo.rawFilePath = `./${item.path}`;
52-
itemInfo.summary = item.summary;
53-
itemInfo.coverImage = item.coverImage.startsWith('http')
54-
? item.coverImage
55-
: `/postCoverImage/${item.coverImage}`;
56-
57-
itemInfo.text = file;
58-
itemInfo.count = symbolsCount(file);
59-
itemInfo.readingTime = symbolsTime(file, 0, 200);
60-
itemInfo.updatedAt = getLastGitUpdateTime(join('markdown/', item.path));
61-
itemInfo.createdAt = getFirstGitCommitTime(join('markdown/', item.path));
62-
63-
itemInfo.modified =
64-
itemInfo.updatedAt && itemInfo.createdAt
65-
? itemInfo.updatedAt.getTime() !== itemInfo.createdAt.getTime()
66-
: false;
67-
68-
postDataMap[itemInfo.path] = itemInfo;
69-
postDataList.push(itemInfo);
63+
function processPostItem({ authors, title, tag, path, coverImage, summary }: PostJsonType) {
64+
const file = importMarkdownFile(`./${path}`);
65+
const createdAt = getFirstGitCommitTime(join('markdown/', path));
66+
const updatedAt = getLastGitUpdateTime(join('markdown/', path));
67+
68+
const postItem: PostItem = {
69+
authors,
70+
title,
71+
tag,
72+
path: path.replace('.md', ''),
73+
rawFilePath: `./${path}`,
74+
summary,
75+
coverImage: coverImage.startsWith('http') ? coverImage : `/postCoverImage/${coverImage}`,
76+
text: file,
77+
count: symbolsCount(file),
78+
readingTime: symbolsTime(file, 0, 200),
79+
createdAt,
80+
updatedAt,
81+
modified: updatedAt && createdAt ? updatedAt.getTime() !== createdAt.getTime() : false,
82+
};
83+
84+
postDataMap[postItem.path] = postItem;
85+
postDataList.push(postItem);
7086
}
7187

72-
jsonData.forEach((postJsonItem: PostJsonType) => {
73-
processPostItem(postJsonItem);
74-
});
88+
jsonData.forEach((postJsonItem) => processPostItem(postJsonItem));
89+
90+
postDataList.sort((a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0));
91+
92+
const result = { postDataMap, postDataList };
93+
writeOutputFile(result);
7594

76-
postDataList.sort((a, b) => {
77-
if (a.createdAt && b.createdAt) {
78-
return b.createdAt.getTime() - a.createdAt.getTime();
79-
}
95+
return result;
96+
}
97+
98+
export async function getPostData(): Promise<{ postDataMap: PostMap; postDataList: PostItem[] }> {
99+
const outputPath = join(process.cwd(), 'markdown/output.json');
80100

81-
return 0;
82-
});
101+
if (existsSync(outputPath)) {
102+
const { postDataMap, postDataList } = importJsonFile('./output.json');
103+
console.log('Using cached post data.');
83104

84-
return { postDataMap, postDataList };
105+
return { postDataMap, postDataList };
106+
} else {
107+
console.log('Output file not found, generating post data...');
108+
109+
return buildPostData();
110+
}
85111
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"compilerOptions": {
33
"lib": ["dom", "dom.iterable", "esnext"],
4-
"target": "es2015",
4+
"target": "es2017",
55
"allowJs": true,
66
"skipLibCheck": true,
77
"strict": true,

0 commit comments

Comments
 (0)