chore(theme): 🎨 change components definition

pull/418/head
BeiyanYunyi 2024-09-18 10:32:34 +08:00
parent e9ce481165
commit b80cfe4cb5
No known key found for this signature in database
GPG Key ID: 912D4689CDEE0CD2
5 changed files with 46 additions and 43 deletions

View File

@ -25,7 +25,7 @@ hero:
--- ---
<script setup> <script setup>
import HomeContent from '@project-trans/vitepress-theme-project-trans/components/HomeContent.vue' import { HomeContent } from '@project-trans/vitepress-theme-project-trans/components'
</script> </script>
<HomeContent> <HomeContent>

View File

@ -25,7 +25,11 @@
"import": "./dist/plugins/MarkdownSectionWrapper.mjs", "import": "./dist/plugins/MarkdownSectionWrapper.mjs",
"require": "./dist/plugins/MarkdownSectionWrapper.js" "require": "./dist/plugins/MarkdownSectionWrapper.js"
}, },
"./components/*": "./dist/components/*" "./components": {
"types": "./dist/components.d.ts",
"import": "./dist/components.mjs",
"require": "./dist/components.js"
}
}, },
"main": "./dist/config.js", "main": "./dist/config.js",
"module": "./dist/config.mjs", "module": "./dist/config.mjs",

View File

@ -0,0 +1,19 @@
import AppearanceToggle from './components/AppearanceToggle.vue'
import AppFooter from './components/AppFooter.vue'
import AppSBox from './components/AppSBox.vue'
import ArticlesMenu from './components/ArticlesMenu.vue'
import CopyrightInfo from './components/CopyrightInfo.vue'
import HomeContent from './components/HomeContent.vue'
import PageInfo from './components/PageInfo.vue'
import ReadingTime from './components/ReadingTime.vue'
export {
AppFooter,
AppSBox,
AppearanceToggle,
ArticlesMenu,
CopyrightInfo,
HomeContent,
PageInfo,
ReadingTime,
}

View File

@ -1,20 +0,0 @@
import AppearanceToggle from './AppearanceToggle.vue'
import AppFooter from './AppFooter.vue'
import AppSBox from './AppSBox.vue'
import ArticlesMenu from './ArticlesMenu.vue'
import CopyrightInfo from './CopyrightInfo.vue'
import HomeContent from './HomeContent.vue'
import PageInfo from './PageInfo.vue'
import ReadingTime from './ReadingTime.vue'
export {
AppearanceToggle,
AppFooter,
AppSBox,
ArticlesMenu,
CopyrightInfo,
HomeContent,
PageInfo,
ReadingTime
}

View File

@ -1,6 +1,8 @@
import { readFileSync, statSync } from 'node:fs' import fs from 'node:fs'
import { dirname, join, resolve } from 'node:path' import path, { dirname, resolve } from 'node:path'
import process from 'node:process'
import { fileURLToPath } from 'node:url' import { fileURLToPath } from 'node:url'
import { GitChangelog } from '@nolebase/vitepress-plugin-git-changelog/vite' import { GitChangelog } from '@nolebase/vitepress-plugin-git-changelog/vite'
import { transformHeadMeta } from '@nolebase/vitepress-plugin-meta' import { transformHeadMeta } from '@nolebase/vitepress-plugin-meta'
import { import {
@ -14,18 +16,16 @@ import mdPangu from 'markdown-it-pangu'
import UnoCSS from 'unocss/vite' import UnoCSS from 'unocss/vite'
import Components from 'unplugin-vue-components/vite' import Components from 'unplugin-vue-components/vite'
import { defineConfig } from 'vitepress' import { defineConfig } from 'vitepress'
import { generateSidebar } from './sidebar' import { generateSidebar } from './sidebar'
import { useThemeContext } from './utils/themeContext' import { useThemeContext } from './utils/themeContext'
import fs from 'fs';
import path from 'path';
// 从文件系统读取 Markdown 文件内容 // 从文件系统读取 Markdown 文件内容
function readMarkdownFileContent(filePath: string): string { function readMarkdownFileContent(filePath: string): string {
if (fs.existsSync(filePath)) { if (fs.existsSync(filePath)) {
return fs.readFileSync(filePath, 'utf-8'); return fs.readFileSync(filePath, 'utf-8')
} }
return ''; return ''
} }
// 统计文档的字数函数 // 统计文档的字数函数
@ -34,15 +34,15 @@ function countWords(content: string): number {
.replace(/```[\s\S]*?```/g, '') // 移除代码块 .replace(/```[\s\S]*?```/g, '') // 移除代码块
.replace(/!\[.*?\]\(.*?\)/g, '') // 移除图片链接 .replace(/!\[.*?\]\(.*?\)/g, '') // 移除图片链接
.replace(/\[.*?\]\(.*?\)/g, '') // 移除普通链接 .replace(/\[.*?\]\(.*?\)/g, '') // 移除普通链接
.replace(/<\/?[^>]+(>|$)/g, '') // 移除 HTML 标签 .replace(/<[^>]+(>|$)/g, '') // 移除 HTML 标签
.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, '') // 移除标点符号 .replace(/[.,/#!$%^&*;:{}=\-_`~()]/g, '') // 移除标点符号
.replace(/\s+/g, ' ') // 将多余的空格归为一个空格 .replace(/\s+/g, ' ') // 将多余的空格归为一个空格
.trim(); // 去除首尾空格 .trim() // 去除首尾空格
const chineseCharacters = cleanedContent.match(/[\u4e00-\u9fff\uff01-\uffe5]/g) || []; const chineseCharacters = cleanedContent.match(/[\u4E00-\u9FFF\uFF01-\uFFE5]/g) || []
const words = cleanedContent.split(/\s+/).filter(Boolean); const words = cleanedContent.split(/\s+/).filter(Boolean)
return chineseCharacters.length + words.length; return chineseCharacters.length + words.length
} }
// https://vitepress.dev/reference/site-config // https://vitepress.dev/reference/site-config
@ -139,7 +139,7 @@ function genConfig() {
navigateUpKeyAriaLabel: '上箭头', navigateUpKeyAriaLabel: '上箭头',
navigateDownKeyAriaLabel: '下箭头', navigateDownKeyAriaLabel: '下箭头',
selectKeyAriaLabel: '回车', selectKeyAriaLabel: '回车',
closeKeyAriaLabel: '退出' closeKeyAriaLabel: '退出',
}, },
}, },
}, },
@ -226,23 +226,23 @@ function genConfig() {
}, },
transformPageData(pageData) { transformPageData(pageData) {
// 构建 Markdown 文件路径 // 构建 Markdown 文件路径
const markdownFile = `${pageData.relativePath}`; const markdownFile = `${pageData.relativePath}`
const filePath = path.join(process.cwd(), 'docs', markdownFile); const filePath = path.join(process.cwd(), 'docs', markdownFile)
// 从文件系统读取文件内容 // 从文件系统读取文件内容
const content = readMarkdownFileContent(filePath); const content = readMarkdownFileContent(filePath)
// 统计字数并插入到 Frontmatter // 统计字数并插入到 Frontmatter
const wordCount = countWords(content); const wordCount = countWords(content)
return { return {
frontmatter: { frontmatter: {
...pageData.frontmatter, ...pageData.frontmatter,
wordCount, // 将字数写入 Frontmatter wordCount, // 将字数写入 Frontmatter
}, },
}; }
}, },
}); })
} }
export default genConfig; export default genConfig