From d1b781ed6f6740baa6d81946d8dd6ffcbcaf6ffe Mon Sep 17 00:00:00 2001 From: Han <1655466387@qq.com> Date: Thu, 20 Mar 2025 19:23:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=80=A7=E8=83=BD=E3=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E3=80=81=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=902.0=20=E7=89=88=E6=9C=AC=E3=80=91=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.mjs | 68 ++++++-------- package.json | 6 +- public/assets/images/alipay.webp | Bin 0 -> 10882 bytes public/assets/images/wechat.webp | Bin 0 -> 27418 bytes src/components/{ => Archive}/Archive.astro | 4 +- .../Archive}/Archive.less | 0 .../{ => ArticleCard}/ArticleCard.astro | 8 +- .../ArticleCard}/ArticleCard.less | 0 src/components/{ => Aside}/Aside.astro | 10 +-- .../Aside}/Aside.less | 0 src/components/{ => BackTop}/BackTop.astro | 2 +- .../BackTop}/BackTop.less | 0 src/components/{ => Comment}/Comment.astro | 2 +- .../Comment}/Comment.less | 0 .../{ => Copyright}/Copyright.astro | 2 +- .../Copyright}/Copyright.less | 0 src/components/{ => Footer}/Footer.astro | 2 +- src/{styles => components/Footer}/Footer.less | 0 src/components/{ => GoogleAd}/GoogleAd.astro | 0 src/components/{ => Head}/Head.astro | 4 +- src/components/{ => Header}/Header.astro | 6 +- .../Header}/Header.less | 0 .../{ => MobileSidebar}/MobileSidebar.astro | 4 +- .../MobileSidebar}/MobileSidebar.less | 0 .../{ => Pagination}/Pagination.astro | 4 +- .../Pagination}/Pagination.less | 0 src/components/Reward/Reward.astro | 9 ++ src/components/Reward/Reward.less | 83 ++++++++++++++++++ src/components/{ => Search}/Search.astro | 2 +- .../Search}/Search.less | 0 src/config.ts | 9 +- src/layouts/{ => Layout}/Layout.astro | 18 ++-- src/{styles => layouts/Layout}/Layout.less | 0 src/layouts/{ => PageLayout}/PageLayout.astro | 14 +-- src/layouts/{ => ToolLayout}/ToolLayout.astro | 12 +-- .../ToolLayout}/ToolLayout.less | 0 src/pages/404.astro | 6 +- src/pages/[...page].astro | 14 +-- src/pages/about/index.md | 5 +- src/pages/archives/index.astro | 10 +-- src/pages/article/[...article].astro | 29 +++--- src/pages/categories/[...categories].astro | 10 +-- src/pages/friends/index.md | 2 +- src/pages/links/index.md | 2 +- src/pages/message/index.md | 2 +- src/pages/rss.xml.ts | 4 +- src/pages/tag/[...tags].astro | 10 +-- src/pages/talking/index.md | 2 +- src/scripts/Comment.ts | 6 +- src/scripts/Footer.ts | 4 +- src/scripts/Friends.ts | 6 +- src/scripts/GoogleAd.ts | 2 +- src/scripts/HanAnalytics.ts | 4 +- src/scripts/Init.ts | 36 ++++---- src/scripts/Links.ts | 6 +- src/scripts/LivePhoto.ts | 2 +- src/scripts/Music.ts | 4 +- src/scripts/Search.ts | 2 +- src/scripts/Smoothscroll.ts | 2 +- src/scripts/Talking.ts | 10 +-- src/scripts/Video.ts | 2 +- src/styles/Base.less | 2 +- src/styles/components/MainHeader.less | 18 ---- src/utils/getCover.ts | 2 +- src/utils/getPostInfo.ts | 2 +- tsconfig.json | 17 +++- 66 files changed, 287 insertions(+), 205 deletions(-) create mode 100644 public/assets/images/alipay.webp create mode 100644 public/assets/images/wechat.webp rename src/components/{ => Archive}/Archive.astro (89%) rename src/{styles => components/Archive}/Archive.less (100%) rename src/components/{ => ArticleCard}/ArticleCard.astro (82%) rename src/{styles/components => components/ArticleCard}/ArticleCard.less (100%) rename src/components/{ => Aside}/Aside.astro (90%) rename src/{styles/components => components/Aside}/Aside.less (100%) rename src/components/{ => BackTop}/BackTop.astro (94%) rename src/{styles/components => components/BackTop}/BackTop.less (100%) rename src/components/{ => Comment}/Comment.astro (77%) rename src/{styles/components => components/Comment}/Comment.less (100%) rename src/components/{ => Copyright}/Copyright.astro (96%) rename src/{styles/components => components/Copyright}/Copyright.less (100%) rename src/components/{ => Footer}/Footer.astro (98%) rename src/{styles => components/Footer}/Footer.less (100%) rename src/components/{ => GoogleAd}/GoogleAd.astro (100%) rename src/components/{ => Head}/Head.astro (98%) rename src/components/{ => Header}/Header.astro (93%) rename src/{styles/components => components/Header}/Header.less (100%) rename src/components/{ => MobileSidebar}/MobileSidebar.astro (85%) rename src/{styles/components => components/MobileSidebar}/MobileSidebar.less (100%) rename src/components/{ => Pagination}/Pagination.astro (94%) rename src/{styles/components => components/Pagination}/Pagination.less (100%) create mode 100644 src/components/Reward/Reward.astro create mode 100644 src/components/Reward/Reward.less rename src/components/{ => Search}/Search.astro (92%) rename src/{styles/components => components/Search}/Search.less (100%) rename src/layouts/{ => Layout}/Layout.astro (65%) rename src/{styles => layouts/Layout}/Layout.less (100%) rename src/layouts/{ => PageLayout}/PageLayout.astro (68%) rename src/layouts/{ => ToolLayout}/ToolLayout.astro (75%) rename src/{styles => layouts/ToolLayout}/ToolLayout.less (100%) delete mode 100644 src/styles/components/MainHeader.less diff --git a/astro.config.mjs b/astro.config.mjs index aeb2c96..97ca0d9 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,8 +1,10 @@ -// @ts-check +import path from "path"; import mdx from '@astrojs/mdx'; import sitemap from '@astrojs/sitemap'; -import { defineConfig } from 'astro/config'; import Compress from "@playform/compress"; +import { defineConfig } from 'astro/config'; +import { fileURLToPath } from 'url'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Markdown 配置================ import remarkMath from "remark-math"; import rehypeSlug from "rehype-slug"; @@ -16,47 +18,31 @@ import swup from '@swup/astro'; export default defineConfig({ site: SITE_INFO.Site, build: { assets: 'vh_static' }, - integrations: [ - swup({ - theme: false, - animationClass: "vh-animation-", - containers: [".vh-animation"], - smoothScrolling: true, - progress: true, - cache: true, - preload: true, - accessibility: true, - updateHead: true, - updateBodyClass: false, - globalInstance: true - }), - Compress({ - CSS: false, - Image: false, - Action: { Passed: async () => true }, - }), - sitemap({ - changefreq: 'weekly', - priority: 0.7, - lastmod: new Date(), - // 处理末尾带 / 的 url - serialize: (item) => ({ ...item, url: item.url.endsWith('/') ? item.url.slice(0, -1) : item.url }) - }), - mdx({ extendMarkdownConfig: false }) - ], + integrations: [swup({ + theme: false, + animationClass: "vh-animation-", + containers: [".vh-animation"], + smoothScrolling: true, + progress: true, + cache: true, + preload: true, + accessibility: true, + updateHead: true, + updateBodyClass: false, + globalInstance: true + }), + Compress({ CSS: false, Image: false, Action: { Passed: async () => true } }), + sitemap({ + changefreq: 'weekly', priority: 0.7, lastmod: new Date(), + // 处理末尾带 / 的 url + serialize: (item) => ({ ...item, url: item.url.endsWith('/') ? item.url.slice(0, -1) : item.url }) + }), mdx({ extendMarkdownConfig: false })], markdown: { - remarkPlugins: [ - remarkMath, - remarkDirective, - remarkNote, - ], - rehypePlugins: [ - rehypeKatex, - rehypeSlug, - addClassNames - ], + remarkPlugins: [remarkMath, remarkDirective, remarkNote,], + rehypePlugins: [rehypeKatex, rehypeSlug, addClassNames], syntaxHighlight: 'shiki', shikiConfig: { theme: 'github-light' }, }, + vite: { resolve: { alias: { "@": path.resolve(__dirname, "./src"), "@public": path.resolve(__dirname, "./public") } } }, server: { host: '0.0.0.0' } -}); +}); \ No newline at end of file diff --git a/package.json b/package.json index b759f9a..51b77d1 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,12 @@ "newpost": "node ./script/newpost.js" }, "dependencies": { - "@astrojs/mdx": "^4.1.1", + "@astrojs/mdx": "^4.2.1", "@astrojs/rss": "^4.0.11", - "@astrojs/sitemap": "^3.2.1", + "@astrojs/sitemap": "^3.3.0", "@swup/astro": "^1.5.0", "aplayer": "^1.10.1", - "astro": "^5.4.3", + "astro": "^5.5.3", "overlayscrollbars": "^2.11.1", "vanilla-lazyload": "^19.1.3", "vh-plugin": "^1.2.2" diff --git a/public/assets/images/alipay.webp b/public/assets/images/alipay.webp new file mode 100644 index 0000000000000000000000000000000000000000..610cf3e593405681f04f876f394a28b01be54df2 GIT binary patch literal 10882 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 Y6n0ZYk8+*D&jq+P5ikG%0000007Noy6#xJL literal 0 HcmV?d00001 diff --git a/public/assets/images/wechat.webp b/public/assets/images/wechat.webp new file mode 100644 index 0000000000000000000000000000000000000000..658f4b63ac98a386c8828e002aadae84a7f3948a GIT binary patch literal 27418 zcmd?OV~{TYllIxRZFirxZQpI%wr$%uZQI6a+qR9RxNaWe&@OUBaR`7^jy_v@qRRnLoeaL>Q*@$UPNPafURugQ<1u7{t=r>ghOW%Id{ za)BFx7heO<9Lqa<9WULpWH0$o`&apmIf``>NmT8c2oTQern7F z_J7(Q0B`X-h-?0yUmI@>U;bY|58v#cLqE=+`t^XL-Fbnzf39@@kUt!J%nT?Xp7w4E zT>Qj51HbEk=nMQrZiSX8W?50Gm~BL+SzM4;1mI9SeWio+=jmk3PUH-dAcNLXk;wope*3YW;7z`tFdRYIevlNUB;9qxL~qgyUP>_e{!Z@YTuhO8JAOM8h8_pM!pyXqjJW45YuA+ z+oJuBrkx}}@|>|0=|Q%!Xc)lkIeMDECz96~H7;`(9V_-|{x zK1L%DDh8p`T8`$<+4cLuG#GWw=R5Yvzg4tKhZK2(5<#I>q<=7f+%x}HZnK*gTL;(E z?)s4!`tNj5rpRlzpqr2n_}2x3e|X$?!p)ZztfrDC@qhU|w(7vr;mUp#EHB1qQ=2io zQfU=BF4XT`jic0IOC&KaVN}jV`Jqm9iV?-rwB+MyP-hJ{#C(XFG4}>VIK_`Hji5_8kuRA*>L}vT{rZFS@cJ z_-IU222O-fkJCgVDeBaSb~%uH^2-KnCvCu=kV*&!C%UZQQpIY)HlS0Y--6sw< zwHCa>*|HG)trSqGSsb=>76(R+y(};1Hobn9OfhnzvKLK$@d5vgAsvAvxI+*0za2q~ z9FzGt;{F_DNZ!$(3H)vbZx3rhTiCAlp5!bD z)Icq8G$(@WQ`Gxa#E`U0VDY+HJr39PA4%d)15unOFy8md@Gemq^G)28F6ac!;AiK% z(8QU-S6cB1_OB59K&i+48U@lKrp>tJ6BK{mGUR3Rzp_Ta(yP}MV+mMSG2X2}~NMpa$WJHI>~o|L&eie{73!5}w0w6u== zBH@z)uT}bgmAz!iv7^}ao{bSAS~Fpc0|ZVm`2V%j>63m_w1FNxxAg}*+872l>oK<9 zs^bqvSC_XpzGm>Cq!Jsa(T(jEFEWk&LH`-8h6;x?NG11DMR2jTkCp^Nfi1;510UZY z)gm4Q99ePEsK}GoF{NXggz5dei!$oV{@)_by~kEiBUD)X~bo13k|20zIE^pAHFzK6TZy)Va;2E>M zA1w;h+TeLLcO5qMwH32Vg=-vV5A#PNrJLrKwK^&Zx{6k1jQ0t8DN^NJ$`*qzq_)94*mTTys>;(}CY{-eH@BLu`m!Rh~z3lL+e z9A$_I&aw%ogLQ{9BsEn;6a5A@J#~B*W4V%CcZS_-Qx90@ndUaN($3wSab6j{xaVFB zppaLhFrup(d1-K^&Wn`4bQaRkk#Q{ItKpWuj zI@9|t>QZF(7ba~RIWF=VZ{%>no`F>*qf!7GSRb_&S#?^#V)4=fb1}UcGK+niSoa@{>oRb&YZx_6C6w z^mk5pp>4%AT19@nAPmH?&kH|A)KIMw;#c|e%0cuX$$-sP^GNbfV0Of%|L!jJao3OD7o}67U-;_7g=XU_^=Eh(W##y|Oee!RL-Hvp!p8lr6oD8lY!ki_ zp?}ep{~kq#Hv?#F4)?(s_$_j0al-KpYM_dTV%mTfQ)Sc8d#H_U+*dffnq`kVjx<(02f(@?`dO`s*nAgIN9s|rc*P?(E@ z0ry`hnL7w7N@!){1p@>Arrpj9062ER

~d+T6SEZXlfL2?`FyqIVa9yq5(cH$sPE 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 diff --git a/src/styles/Archive.less b/src/components/Archive/Archive.less similarity index 100% rename from src/styles/Archive.less rename to src/components/Archive/Archive.less diff --git a/src/components/ArticleCard.astro b/src/components/ArticleCard/ArticleCard.astro similarity index 82% rename from src/components/ArticleCard.astro rename to src/components/ArticleCard/ArticleCard.astro index 937e1ae..22a0455 100644 --- a/src/components/ArticleCard.astro +++ b/src/components/ArticleCard/ArticleCard.astro @@ -1,14 +1,14 @@ --- import { Image } from "astro:assets"; -import { getDescription, fmtTime } from "../utils/index"; -const { post, index } = Astro.props; +import { getDescription, fmtTime } from "@/utils/index"; +const { post } = Astro.props; // 获取文章的摘要 const description = getDescription(post); // 获取封面图 -import getCover from "../utils/getCover"; +import getCover from "@/utils/getCover"; const ARTICLE_COVER: string = await getCover(post.data.cover); // 文章Item组件样式 -import "../styles/components/ArticleCard.less"; +import "./ArticleCard.less"; ---

diff --git a/src/styles/components/ArticleCard.less b/src/components/ArticleCard/ArticleCard.less similarity index 100% rename from src/styles/components/ArticleCard.less rename to src/components/ArticleCard/ArticleCard.less diff --git a/src/components/Aside.astro b/src/components/Aside/Aside.astro similarity index 90% rename from src/components/Aside.astro rename to src/components/Aside/Aside.astro index 4f4e068..cd02d06 100644 --- a/src/components/Aside.astro +++ b/src/components/Aside/Aside.astro @@ -2,12 +2,12 @@ // 静态图片 import { Image } from "astro:assets"; // 时间处理 -import { fmtTime } from "../utils/index"; +import { fmtTime } from "@/utils/index"; // 获取用户配置数据 -import SITE_CONFIG from "../config"; +import SITE_CONFIG from "@/config"; const { Avatar, Author, Motto, WebSites, GoogleAds } = SITE_CONFIG; // 获取文章数据 -import { getCategories, getTags, getRecommendArticles } from "../utils/getPostInfo"; +import { getCategories, getTags, getRecommendArticles } from "@/utils/getPostInfo"; // 分类列表 const categories = getCategories(); // 热门标签 @@ -15,9 +15,9 @@ const tags = getTags(); // 最新文章 const recommendArticles = getRecommendArticles(); // Google 广告组件 -import GoogleAd from "../components/GoogleAd.astro"; +import GoogleAd from "@/components/GoogleAd/GoogleAd.astro"; // 侧边栏样式 -import "../styles/components/Aside.less"; +import "./Aside.less"; ---
diff --git a/src/pages/categories/[...categories].astro b/src/pages/categories/[...categories].astro index 6e2d9c8..42a3749 100644 --- a/src/pages/categories/[...categories].astro +++ b/src/pages/categories/[...categories].astro @@ -1,5 +1,5 @@ --- -import { getCategoriesList } from "../../utils/getArchive"; +import { getCategoriesList } from "@/utils/getArchive"; import { getCollection } from "astro:content"; export async function getStaticPaths(): Promise { const posts = await getCollection("blog"); @@ -9,14 +9,14 @@ export async function getStaticPaths(): Promise { const { categories } = Astro.params; const articleList = await getCategoriesList(categories); // 页面 Info -import SITE_CONFIG from "../../config"; +import SITE_CONFIG from "@/config"; const { Description } = SITE_CONFIG; // 公共 Layout -import Layout from "../../layouts/Layout.astro"; +import Layout from "@/layouts/Layout/Layout.astro"; // Aside组件 -import Aside from "../../components/Aside.astro"; +import Aside from "@/components/Aside/Aside.astro"; // 文章列表组件 -import Archive from "../../components/Archive.astro"; +import Archive from "@/components/Archive/Archive.astro"; --- diff --git a/src/pages/friends/index.md b/src/pages/friends/index.md index 3916851..ba1ab95 100644 --- a/src/pages/friends/index.md +++ b/src/pages/friends/index.md @@ -2,7 +2,7 @@ title: "朋友的新动态" h1: "朋友的新动态 🎴" desc: "来看看我的朋友们都在干嘛." -layout: "../../layouts/ToolLayout.astro" +layout: "@/layouts/ToolLayout/ToolLayout.astro" type: "friends" --- diff --git a/src/pages/links/index.md b/src/pages/links/index.md index 15d0c3d..c296b34 100644 --- a/src/pages/links/index.md +++ b/src/pages/links/index.md @@ -2,7 +2,7 @@ title: "友情链接" h1: "朋友圈 👭" desc: "天下快意之事莫若友。" -layout: "../../layouts/ToolLayout.astro" +layout: "@/layouts/ToolLayout/ToolLayout.astro" type: "links" --- diff --git a/src/pages/message/index.md b/src/pages/message/index.md index 2afec00..85d49b2 100644 --- a/src/pages/message/index.md +++ b/src/pages/message/index.md @@ -2,7 +2,7 @@ title: "留言" h1: "留言板 🌸" desc: "快友之事莫若谈。" -layout: "../../layouts/ToolLayout.astro" +layout: "@/layouts/ToolLayout/ToolLayout.astro" type: "message" --- diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index 88d6c16..8eec8e5 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -1,7 +1,7 @@ import rss from '@astrojs/rss'; import { getCollection } from 'astro:content'; -import { getDescription } from '../utils/index' -import SITE_CONFIG from '../config'; +import { getDescription } from '@/utils/index' +import SITE_CONFIG from '@/config'; const { Title, Description } = SITE_CONFIG; diff --git a/src/pages/tag/[...tags].astro b/src/pages/tag/[...tags].astro index 50d2b39..73a0234 100644 --- a/src/pages/tag/[...tags].astro +++ b/src/pages/tag/[...tags].astro @@ -1,5 +1,5 @@ --- -import { getTagsList } from "../../utils/getArchive"; +import { getTagsList } from "@/utils/getArchive"; import { getCollection } from "astro:content"; export async function getStaticPaths(): Promise { const posts = await getCollection("blog"); @@ -11,14 +11,14 @@ export async function getStaticPaths(): Promise { const { tags } = Astro.params; const articleList = await getTagsList(tags); // 页面 Info -import SITE_CONFIG from "../../config"; +import SITE_CONFIG from "@/config"; const { Description } = SITE_CONFIG; // 公共 Layout -import Layout from "../../layouts/Layout.astro"; +import Layout from "@/layouts/Layout/Layout.astro"; // Aside组件 -import Aside from "../../components/Aside.astro"; +import Aside from "@/components/Aside/Aside.astro"; // 文章列表组件 -import Archive from "../../components/Archive.astro"; +import Archive from "@/components/Archive/Archive.astro"; --- diff --git a/src/pages/talking/index.md b/src/pages/talking/index.md index b01221d..8209978 100644 --- a/src/pages/talking/index.md +++ b/src/pages/talking/index.md @@ -2,7 +2,7 @@ title: "动态" h1: "动态 🥫" desc: "记录美好生活." -layout: "../../layouts/ToolLayout.astro" +layout: "@/layouts/ToolLayout/ToolLayout.astro" type: "talking" --- diff --git a/src/scripts/Comment.ts b/src/scripts/Comment.ts index e70338a..c0e1ee6 100644 --- a/src/scripts/Comment.ts +++ b/src/scripts/Comment.ts @@ -1,8 +1,8 @@ -import SITE_INFO from "../config"; +import SITE_INFO from "@/config"; // 图片灯箱 -import "../../public/assets/js/view-image.min.js"; +import "@public/assets/js/view-image.min.js"; declare const ViewImage: any; -import { LoadScript } from "../utils/index"; +import { LoadScript } from "@/utils/index"; declare const twikoo: any; // 处理评论区数据 diff --git a/src/scripts/Footer.ts b/src/scripts/Footer.ts index b80780b..3d95698 100644 --- a/src/scripts/Footer.ts +++ b/src/scripts/Footer.ts @@ -1,7 +1,7 @@ // 格式化时间 -import { fmtDate } from "../utils/index"; +import { fmtDate } from "@/utils/index"; // 页面内容的元数据 -import SITE_CONFIG from "../config"; +import SITE_CONFIG from "@/config"; const { CreateTime } = SITE_CONFIG; // 初始化 网站运行时间 export default () => (document.querySelector("em.web_time")!.textContent = fmtDate(CreateTime)) \ No newline at end of file diff --git a/src/scripts/Friends.ts b/src/scripts/Friends.ts index 0aa8f19..925a1b3 100644 --- a/src/scripts/Friends.ts +++ b/src/scripts/Friends.ts @@ -1,7 +1,7 @@ import vh from 'vh-plugin' -import { fmtDate } from '../utils/index' -import { $GET } from '../utils/index' +import { fmtDate } from '@/utils/index' +import { $GET } from '@/utils/index' const FriendsInit = async (data: any) => { const friendsDOM = document.querySelector('.vh-container>.vh-tools-main>main.friends-main') @@ -18,6 +18,6 @@ const FriendsInit = async (data: any) => { } // 朋友圈 RSS 初始化 -import FRIENDS_DATA from "../page_data/Friends"; +import FRIENDS_DATA from "@/page_data/Friends"; const { api, data } = FRIENDS_DATA; export default () => FriendsInit(api || data); \ No newline at end of file diff --git a/src/scripts/GoogleAd.ts b/src/scripts/GoogleAd.ts index 3d35ae2..8b006d1 100644 --- a/src/scripts/GoogleAd.ts +++ b/src/scripts/GoogleAd.ts @@ -5,7 +5,7 @@ declare global { adsbygoogle: any[]; } } -import SITE_INFO from '../config' +import SITE_INFO from '@/config' const { GoogleAds } = SITE_INFO export default () => { const asideAD: any = document.querySelector('.vh-aside-ad') diff --git a/src/scripts/HanAnalytics.ts b/src/scripts/HanAnalytics.ts index 751db40..6984d36 100644 --- a/src/scripts/HanAnalytics.ts +++ b/src/scripts/HanAnalytics.ts @@ -1,7 +1,7 @@ // Han Analytics 统计 -import SITE_INFO from "../config"; -import { LoadScript } from "../utils/index"; +import SITE_INFO from "@/config"; +import { LoadScript } from "@/utils/index"; export default async () => { const { HanAnalytics } = SITE_INFO; diff --git a/src/scripts/Init.ts b/src/scripts/Init.ts index 31fced5..9f8b9be 100644 --- a/src/scripts/Init.ts +++ b/src/scripts/Init.ts @@ -1,38 +1,38 @@ -import { inRouter, outRouter } from "../utils/updateRouter"; +import { inRouter, outRouter } from "@/utils/updateRouter"; // 初始化文章代码块 -import codeInit from "../scripts/Code"; +import codeInit from "@/scripts/Code"; // 初始化视频播放器 -import videoInit from "../scripts/Video"; +import videoInit from "@/scripts/Video"; // 初始化音乐播放器 -import musicInit from "../scripts/Music"; +import musicInit from "@/scripts/Music"; // 初始化 LivePhoto -import livePhotoInit from './LivePhoto' +import livePhotoInit from '@/scripts/LivePhoto' // 初始化BackTop组件 -import BackTopInitFn from "../scripts/BackTop"; +import BackTopInitFn from "@/scripts/BackTop"; // 搜索 -import { searchFn, vhSearchInit } from "../scripts/Search"; +import { searchFn, vhSearchInit } from "@/scripts/Search"; // 图片懒加载 -import vhLzImgInit from "../scripts/vhLazyImg"; +import vhLzImgInit from "@/scripts/vhLazyImg"; // 顶部导航 Current 状态 -import initLinkCurrent from "../scripts/Header"; +import initLinkCurrent from "@/scripts/Header"; // 底部网站运行时间 -import initWebSiteTime from "../scripts/Footer"; +import initWebSiteTime from "@/scripts/Footer"; // 友情链接初始化 -import initLinks from "../scripts/Links"; +import initLinks from "@/scripts/Links"; // 朋友圈 RSS 初始化 -import initFriends from "../scripts/Friends"; +import initFriends from "@/scripts/Friends"; // 动态说说初始化 -import initTalking from "../scripts/Talking"; +import initTalking from "@/scripts/Talking"; // 文章评论初始化 -import initComment from "../scripts/Comment"; +import initComment from "@/scripts/Comment"; // 移动端侧边栏初始化 -import initMobileSidebar from "../scripts/MobileSidebar"; +import initMobileSidebar from "@/scripts/MobileSidebar"; // Google 广告 -import GoogleAdInit from "../scripts/GoogleAd"; +import GoogleAdInit from "@/scripts/GoogleAd"; // Han Analytics 统计 -import HanAnalyticsInit from "../scripts/HanAnalytics"; +import HanAnalyticsInit from "@/scripts/HanAnalytics"; // SmoothScroll 滚动优化 -import SmoothScroll from "../scripts/Smoothscroll"; +import SmoothScroll from "@/scripts/Smoothscroll"; // ============================================================ diff --git a/src/scripts/Links.ts b/src/scripts/Links.ts index 3a4410c..12aa964 100644 --- a/src/scripts/Links.ts +++ b/src/scripts/Links.ts @@ -1,7 +1,7 @@ import vh from 'vh-plugin' -import { $GET } from '../utils/index' +import { $GET } from '@/utils/index' // 图片懒加载 -import vhLzImgInit from "../scripts/vhLazyImg"; +import vhLzImgInit from "@/scripts/vhLazyImg"; // 渲染 const LinksInit = async (data: any) => { const linksDOM = document.querySelector('.vh-container>.vh-tools-main>main.links-main') @@ -20,6 +20,6 @@ const LinksInit = async (data: any) => { } // 友情链接初始化 -import LINKS_DATA from "../page_data/Link"; +import LINKS_DATA from "@/page_data/Link"; const { api, data } = LINKS_DATA; export default () => LinksInit(api || data) \ No newline at end of file diff --git a/src/scripts/LivePhoto.ts b/src/scripts/LivePhoto.ts index 822fc94..9c5f5a9 100644 --- a/src/scripts/LivePhoto.ts +++ b/src/scripts/LivePhoto.ts @@ -1,5 +1,5 @@ // SmoothScroll 滚动优化 -import { LoadScript } from "../utils/index"; +import { LoadScript } from "@/utils/index"; declare const LivePhotosKit: any; export default async () => { const livePhotoList = document.querySelectorAll('.vh-node.vh-vhLivePhoto'); diff --git a/src/scripts/Music.ts b/src/scripts/Music.ts index 3821b51..2f77050 100644 --- a/src/scripts/Music.ts +++ b/src/scripts/Music.ts @@ -1,6 +1,6 @@ -import SITE_CONFIG from "../config"; +import SITE_CONFIG from "@/config"; const { vhMusicApi } = SITE_CONFIG; -import { $GET } from '../utils/index' +import { $GET } from '@/utils/index' import 'aplayer/dist/APlayer.min.css'; import APlayer from 'aplayer'; diff --git a/src/scripts/Search.ts b/src/scripts/Search.ts index 8d4e42d..0b08b83 100644 --- a/src/scripts/Search.ts +++ b/src/scripts/Search.ts @@ -1,4 +1,4 @@ -import { $GET } from '../utils/index' +import { $GET } from '@/utils/index' // 更新数据 let searchJson: any[] = []; diff --git a/src/scripts/Smoothscroll.ts b/src/scripts/Smoothscroll.ts index 77fbb80..bbff9d3 100644 --- a/src/scripts/Smoothscroll.ts +++ b/src/scripts/Smoothscroll.ts @@ -1,5 +1,5 @@ // SmoothScroll 滚动优化 -import { LoadScript } from "../utils/index"; +import { LoadScript } from "@/utils/index"; declare const SmoothScroll: any; export default async () => { await LoadScript("/assets/js/smoothscroll.min.js"); diff --git a/src/scripts/Talking.ts b/src/scripts/Talking.ts index c77813a..61ddfe3 100644 --- a/src/scripts/Talking.ts +++ b/src/scripts/Talking.ts @@ -1,11 +1,11 @@ import vh from 'vh-plugin' -import { fmtDate } from '../utils/index' -import { $GET } from '../utils/index' +import { fmtDate } from '@/utils/index' +import { $GET } from '@/utils/index' // 图片懒加载 -import vhLzImgInit from "../scripts/vhLazyImg"; +import vhLzImgInit from "@/scripts/vhLazyImg"; // 灯箱JS初始化====== -import "../../public/assets/js/view-image.min.js"; +import "@public/assets/js/view-image.min.js"; declare const ViewImage: any; // 灯箱JS初始化====== @@ -30,6 +30,6 @@ const TalkingInit = async (data: any) => { // 动态说说初始化 -import TALKING_DATA from "../page_data/Talking"; +import TALKING_DATA from "@/page_data/Talking"; const { api, data } = TALKING_DATA; export default () => TalkingInit(api || data); \ No newline at end of file diff --git a/src/scripts/Video.ts b/src/scripts/Video.ts index ae55fd7..ebe0629 100644 --- a/src/scripts/Video.ts +++ b/src/scripts/Video.ts @@ -1,4 +1,4 @@ -import { LoadScript } from "../utils/index"; +import { LoadScript } from "@/utils/index"; // 初始化视频播放器 declare const DPlayer: any; declare const Hls: any; diff --git a/src/styles/Base.less b/src/styles/Base.less index 3772750..578d005 100644 --- a/src/styles/Base.less +++ b/src/styles/Base.less @@ -215,9 +215,9 @@ html.is-animating { z-index: 1; &.vh-article-ad { + margin-bottom: 1rem; box-sizing: border-box; padding: 0.75rem; - margin-top: 1rem; border-radius: 0.5rem; background-color: #fff; box-shadow: 0 3px 8px 6px rgba(7, 17, 27, 0.05); diff --git a/src/styles/components/MainHeader.less b/src/styles/components/MainHeader.less deleted file mode 100644 index 83ee959..0000000 --- a/src/styles/components/MainHeader.less +++ /dev/null @@ -1,18 +0,0 @@ -// main.vh-main { - -// &>header.main-header { -// box-sizing: border-box; -// width: 100%; -// height: 10rem; -// overflow: hidden; -// transition: all 2s ease-in-out; -// } - - -// &.vh-index { -// &>header.main-header { -// height: 20rem; -// transition: all 2s ease-in-out; -// } -// } -// } \ No newline at end of file diff --git a/src/utils/getCover.ts b/src/utils/getCover.ts index a40e035..0eadaff 100644 --- a/src/utils/getCover.ts +++ b/src/utils/getCover.ts @@ -2,7 +2,7 @@ import path from 'path'; import _fs from 'fs'; const fs = _fs.promises; import { fileURLToPath } from 'url'; -import SITE_INFO from '../config'; +import SITE_INFO from '@/config'; // 获取当前模块的目录路径 const __filename = fileURLToPath(import.meta.url); // 当前文件的绝对路径 const __dirname = path.dirname(__filename); // 当前文件所在的目录 diff --git a/src/utils/getPostInfo.ts b/src/utils/getPostInfo.ts index 758a219..ef85503 100644 --- a/src/utils/getPostInfo.ts +++ b/src/utils/getPostInfo.ts @@ -1,6 +1,6 @@ import { getCollection } from "astro:content"; // 获取封面图 -import getCover from "../utils/getCover"; +import getCover from "@/utils/getCover"; const posts = (await getCollection("blog")).sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()); // 获取文章分类 const getCategories = () => { diff --git a/tsconfig.json b/tsconfig.json index 25ab80d..7ffb72d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,22 @@ { "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "strictNullChecks": true, + "jsx": "preserve", + "paths": { + "@/*": [ + "./src/*" + ], + "@public/*": [ + "./public/*" + ], + } + }, "include": [ ".astro/types.d.ts", "**/*" ], "exclude": [ "dist" - ], - "compilerOptions": { - "strictNullChecks": true - } + ] } \ No newline at end of file