CINXE.COM
我的文章 | liruifengv
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://liruifengv.com/posts/"><meta name="generator" content="Astro v5.0.2"><!-- General Meta Tags --><title>我的文章 | liruifengv</title><meta name="title" content="我的文章 | liruifengv"><meta name="description" content="liruifengv 的文章列表"><meta name="author" content="liruifengv"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="我的文章 | liruifengv"><meta property="og:description" content="liruifengv 的文章列表"><meta property="og:url" content="https://liruifengv.com/posts/"><meta property="og:image" content="https://liruifengv.com/og.png"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://liruifengv.com/posts/"><meta property="twitter:title" content="我的文章 | liruifengv"><meta property="twitter:description" content="liruifengv 的文章列表"><meta property="twitter:image" content="https://liruifengv.com/og.png"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><style type="text/css">@font-face {font-family:Public Sans;font-style:normal;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/latin/wght/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:Public Sans;font-style:normal;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/latin-ext/wght/normal.woff2);unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:Public Sans;font-style:normal;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/vietnamese/wght/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:Public Sans;font-style:normal;font-weight:700;src:url(/cf-fonts/v/public-sans/5.0.16/latin/wght/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:Public Sans;font-style:normal;font-weight:700;src:url(/cf-fonts/v/public-sans/5.0.16/latin-ext/wght/normal.woff2);unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:Public Sans;font-style:normal;font-weight:700;src:url(/cf-fonts/v/public-sans/5.0.16/vietnamese/wght/normal.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:Public Sans;font-style:italic;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/latin/wght/italic.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:Public Sans;font-style:italic;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/vietnamese/wght/italic.woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-display:swap;}@font-face {font-family:Public Sans;font-style:italic;font-weight:400;src:url(/cf-fonts/v/public-sans/5.0.16/latin-ext/wght/italic.woff2);unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/arabic/wght/normal.woff2);unicode-range:U+0600-06FF,U+0750-077F,U+0870-088E,U+0890-0891,U+0898-08E1,U+08E3-08FF,U+200C-200E,U+2010-2011,U+204F,U+2E41,U+FB50-FDFF,U+FE70-FE74,U+FE76-FEFC;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/cyrillic-ext/wght/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/latin/wght/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/hebrew/wght/normal.woff2);unicode-range:U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/latin-ext/wght/normal.woff2);unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:500;src:url(/cf-fonts/v/rubik/5.0.18/cyrillic/wght/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/cyrillic-ext/wght/normal.woff2);unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/arabic/wght/normal.woff2);unicode-range:U+0600-06FF,U+0750-077F,U+0870-088E,U+0890-0891,U+0898-08E1,U+08E3-08FF,U+200C-200E,U+2010-2011,U+204F,U+2E41,U+FB50-FDFF,U+FE70-FE74,U+FE76-FEFC;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/cyrillic/wght/normal.woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/latin/wght/normal.woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/latin-ext/wght/normal.woff2);unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;font-display:swap;}@font-face {font-family:Rubik;font-style:normal;font-weight:600;src:url(/cf-fonts/v/rubik/5.0.18/hebrew/wght/normal.woff2);unicode-range:U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;font-display:swap;}</style><script src="/toggle-theme.js"></script><!-- Google tag (gtag.js) --><script async src="https://www.googletagmanager.com/gtag/js?id=G-LH9N740HBE"></script><script type="module">window.dataLayer=window.dataLayer||[];function a(){window.dataLayer.push(arguments)}a("js",new Date);a("config","G-LH9N740HBE");</script><link rel="stylesheet" href="/_astro/about.BaOpPmvv.css"> <style>.hero:where(.astro-bbe6dxrz){font-size:var(--text-lg);text-align:left}.title:where(.astro-bbe6dxrz),.tagline:where(.astro-bbe6dxrz){max-width:37ch;margin-inline:auto}.title:where(.astro-bbe6dxrz){color:var(--gray-0);font-size:1.5rem;line-height:2rem}@media (min-width: 768px){.title:where(.astro-bbe6dxrz){font-size:1.875rem;line-height:2.25rem}}.tagline:where(.astro-bbe6dxrz){font-size:1.125rem;line-height:1.75rem}@media (min-width: 768px){.tagline:where(.astro-bbe6dxrz){font-size:1.25rem;line-height:1.75rem}}@media (min-width: 50em){.hero:where(.astro-bbe6dxrz){font-size:var(--text-xl)}.start:where(.astro-bbe6dxrz){text-align:start}.start:where(.astro-bbe6dxrz) .title:where(.astro-bbe6dxrz),.start:where(.astro-bbe6dxrz) .tagline:where(.astro-bbe6dxrz){margin-inline:unset}} .list:where(.astro-nni2rj4u){display:flex;flex-direction:column;gap:.5rem}a:where(.astro-nni2rj4u){text-decoration:none}li:where(.astro-nni2rj4u){list-style:none}.title:where(.astro-nni2rj4u):hover{color:var(--link-color)}.title:where(.astro-nni2rj4u){z-index:1;color:var(--gray-200);font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.title:where(.astro-nni2rj4u){font-size:1.125rem;line-height:1.75rem}}.time:where(.astro-nni2rj4u){color:var(--gray-400);font-size:.8rem;margin:.5rem}.disabled:where(.astro-xk6fhpz7){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.5}svg:where(.astro-xk6fhpz7){dark:text-white}.list:where(.astro-xk6fhpz7){display:flex;flex-direction:column;flex-wrap:wrap;align-items:center} .action:where(.astro-balv45lp){position:relative;display:flex;place-content:center;text-align:center;padding:.56em 1.5em;gap:.8em;color:var(--accent-text-over);text-decoration:none;line-height:1.1;border-radius:999rem;overflow:hidden;background:var(--gradient-accent-orange);box-shadow:var(--shadow-md);white-space:nowrap;align-items:center;font-size:1.125rem;line-height:1.75rem}@media (min-width: 768px){.action:where(.astro-balv45lp){font-size:1.25rem;line-height:1.75rem}}.action:where(.astro-balv45lp):after{content:"";position:absolute;inset:0;pointer-events:none;transition:background-color var(--theme-transition);mix-blend-mode:overlay}.action:where(.astro-balv45lp):focus:after,.action:where(.astro-balv45lp):hover:after{background-color:hsla(var(--gray-999-basis),.3)}aside:where(.astro-rcdzuq3a){display:flex;flex-direction:column;gap:3rem;border-top:1px solid var(--gray-800);border-bottom:1px solid var(--gray-800);padding:5rem 1.5rem;background-color:var(--gray-999_40);box-shadow:var(--shadow-sm)}h2:where(.astro-rcdzuq3a){text-align:center;font-size:1.25rem;line-height:1.75rem}@media (min-width: 768px){h2:where(.astro-rcdzuq3a){font-size:1.5rem;line-height:2rem}}@media (min-width: 50em){aside:where(.astro-rcdzuq3a){padding:7.5rem;flex-direction:row;flex-wrap:wrap;justify-content:space-between}h2:where(.astro-rcdzuq3a){text-align:left}} .tag:where(.astro-blwjyjpt){padding:.5rem 1rem;color:var(--accent-text-over);border:1px solid var(--accent-regular);background-color:var(--accent-regular);border-radius:999rem;font-size:var(--text-md);white-space:nowrap;display:inline-block;margin-bottom:.5rem;min-width:5rem;text-align:center}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}} </style> <link rel="stylesheet" href="/_astro/about.r1VhreVz.css"> <style>header:where(.astro-3ddu4loq){padding-bottom:1.5rem;border-bottom:1px solid var(--gray-800)}.details:where(.astro-3ddu4loq){display:flex;flex-direction:column;gap:1.5rem;justify-content:space-between;align-items:center}.tags:where(.astro-3ddu4loq){display:flex;flex-wrap:wrap}.description:where(.astro-3ddu4loq){font-size:var(--text-lg);max-width:54ch}@media (min-width: 50em){.details:where(.astro-3ddu4loq){flex-direction:row;gap:2.5rem}} svg:where(.astro-patnjmll){vertical-align:middle;width:var(--size, 1em);height:var(--size, 1em)} [data-astro-image]{width:100%;height:auto;-o-object-fit:var(--fit);object-fit:var(--fit);-o-object-position:var(--pos);object-position:var(--pos);aspect-ratio:var(--w) / var(--h)}[data-astro-image=responsive]{max-width:calc(var(--w) * 1px);max-height:calc(var(--h) * 1px)}[data-astro-image=fixed]{width:calc(var(--w) * 1px);height:calc(var(--h) * 1px)} </style></head> <body> <div class="stack min-h-screen"> <nav class="astro-dmqpwcec"> <div class="menu-header astro-dmqpwcec"> <a href="/" class="site-title astro-dmqpwcec"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="url(#icon-gradient-1q7zevfs9)" fill="url(#icon-gradient-1q7zevfs9)" style="--size:1.6em" class="astro-patnjmll"> <g class="astro-patnjmll"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="m80 96 40 32-40 32m56 0h40"/><rect width="192" height="160" x="32" y="48" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16.97" rx="8.5"/></g> <linearGradient id="icon-gradient-1q7zevfs9" x1="23" x2="235" y1="43" y2="202" gradientUnits="userSpaceOnUse" class="astro-patnjmll"> <stop stop-color="var(--gradient-stop-1)" class="astro-patnjmll"></stop> <stop offset=".5" stop-color="var(--gradient-stop-2)" class="astro-patnjmll"></stop> <stop offset="1" stop-color="var(--gradient-stop-3)" class="astro-patnjmll"></stop> </linearGradient> </svg> liruifengv </a> <menu-button class="astro-dmqpwcec"> <template class="astro-dmqpwcec"> <button class="menu-button astro-dmqpwcec" aria-expanded="false"> <span class="sr-only astro-dmqpwcec">Menu</span> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="M40 128h176M40 64h176M40 192h176"/></g> </svg> </button> </template> </menu-button> </div> <noscript> <ul class="nav-items astro-dmqpwcec"> <li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/"> 首页 </a> </li><li class="astro-dmqpwcec"> <a aria-current="true" class="link active astro-dmqpwcec" href="/posts/"> 文章 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/tags/"> 标签 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/projects/"> 项目 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/about/"> 关于 </a> </li> </ul> </noscript> <noscript> <div class="menu-footer astro-dmqpwcec"> <div class="socials astro-dmqpwcec"> <a href="https://twitter.com/liruifengv" class="social astro-dmqpwcec"> <span class="sr-only astro-dmqpwcec">Twitter</span> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="M128 88c0-22 18.5-40.3 40.5-40a40 40 0 0 1 36.2 24H240l-32.3 32.3A127.9 127.9 0 0 1 80 224c-32 0-40-12-40-12s32-12 48-36c0 0-64-32-48-120 0 0 40 40 88 48Z"/></g> </svg> </a><a href="https://github.com/liruifengv" class="social astro-dmqpwcec"> <span class="sr-only astro-dmqpwcec">GitHub</span> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><g stroke-linecap="round" stroke-linejoin="round"><path fill="none" stroke-width="14.7" d="M55.7 167.2c13.9 1 21.3 13.1 22.2 14.6 4.2 7.2 10.4 9.6 18.3 7.1l1.1-3.4a60.3 60.3 0 0 1-25.8-11.9c-12-10.1-18-25.6-18-46.3"/><path fill="none" stroke-width="16" d="M61.4 205.1a24.5 24.5 0 0 1-3-6.1c-3.2-7.9-7.1-10.6-7.8-11.1l-1-.6c-2.4-1.6-9.5-6.5-7.2-13.9 1.4-4.5 6-7.2 12.3-7.2h.8c4 .3 7.6 1.5 10.7 3.2-9.1-10.1-13.6-24.3-13.6-42.3 0-11.3 3.5-21.7 10.1-30.4A46.7 46.7 0 0 1 65 67.3a8.3 8.3 0 0 1 5-4.7c2.8-.9 13.3-2.7 33.2 9.9a105 105 0 0 1 50.5 0c19.9-12.6 30.4-10.8 33.2-9.9 2.3.7 4.1 2.4 5 4.7 5 12.7 4 23.2 2.6 29.4 6.7 8.7 10 18.9 10 30.4 0 42.6-25.8 54.7-43.6 58.7 1.4 4.1 2.2 8.8 2.2 13.7l-.1 23.4v2.3"/><path fill="none" stroke-width="16" d="M160.9 185.7c1.4 4.1 2.2 8.8 2.2 13.7l-.1 23.4v2.3A98.6 98.6 0 1 0 61.4 205c-1.4-2.1-11.3-17.5-11.8-17.8-2.4-1.6-9.5-6.5-7.2-13.9 1.4-4.5 6-7.2 12.3-7.2h.8c4 .3 7.6 1.5 10.7 3.2-9.1-10.1-13.6-24.3-13.6-42.3 0-11.3 3.5-21.7 10.1-30.4A46.4 46.4 0 0 1 65 67.3a8.3 8.3 0 0 1 5-4.7c2.8-.9 13.3-2.7 33.2 9.9a105 105 0 0 1 50.5 0c19.9-12.6 30.4-10.8 33.2-9.9 2.3.7 4.1 2.4 5 4.7 5 12.7 4 23.2 2.6 29.4 6.7 8.7 10 18.9 10 30.4.1 42.6-25.8 54.7-43.6 58.6z"/><path fill="none" stroke-width="18.7" d="m170.1 203.3 17.3-12 17.2-18.7 9.5-26.6v-27.9l-9.5-27.5" /><path fill="none" stroke-width="22.7" d="m92.1 57.3 23.3-4.6 18.7-1.4 29.3 5.4m-110 32.6-8 16-4 21.4.6 20.3 3.4 13" /><path fill="none" stroke-width="13.3" d="M28.8 133a100 100 0 0 0 66.9 94.4v-8.7c-22.4 1.8-33-11.5-35.6-19.8-3.4-8.6-7.8-11.4-8.5-11.8"/></g></g> </svg> </a> </div> </div> </noscript> <div id="menu-content" hidden class="astro-dmqpwcec"> <ul class="nav-items astro-dmqpwcec"> <li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/"> 首页 </a> </li><li class="astro-dmqpwcec"> <a aria-current="true" class="link active astro-dmqpwcec" href="/posts/"> 文章 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/tags/"> 标签 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/projects/"> 项目 </a> </li><li class="astro-dmqpwcec"> <a aria-current="false" class="link astro-dmqpwcec" href="/about/"> 关于 </a> </li> </ul> <div class="menu-footer astro-dmqpwcec"> <div class="socials astro-dmqpwcec"> <a href="https://twitter.com/liruifengv" class="social astro-dmqpwcec"> <span class="sr-only astro-dmqpwcec">Twitter</span> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="M128 88c0-22 18.5-40.3 40.5-40a40 40 0 0 1 36.2 24H240l-32.3 32.3A127.9 127.9 0 0 1 80 224c-32 0-40-12-40-12s32-12 48-36c0 0-64-32-48-120 0 0 40 40 88 48Z"/></g> </svg> </a><a href="https://github.com/liruifengv" class="social astro-dmqpwcec"> <span class="sr-only astro-dmqpwcec">GitHub</span> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><g stroke-linecap="round" stroke-linejoin="round"><path fill="none" stroke-width="14.7" d="M55.7 167.2c13.9 1 21.3 13.1 22.2 14.6 4.2 7.2 10.4 9.6 18.3 7.1l1.1-3.4a60.3 60.3 0 0 1-25.8-11.9c-12-10.1-18-25.6-18-46.3"/><path fill="none" stroke-width="16" d="M61.4 205.1a24.5 24.5 0 0 1-3-6.1c-3.2-7.9-7.1-10.6-7.8-11.1l-1-.6c-2.4-1.6-9.5-6.5-7.2-13.9 1.4-4.5 6-7.2 12.3-7.2h.8c4 .3 7.6 1.5 10.7 3.2-9.1-10.1-13.6-24.3-13.6-42.3 0-11.3 3.5-21.7 10.1-30.4A46.7 46.7 0 0 1 65 67.3a8.3 8.3 0 0 1 5-4.7c2.8-.9 13.3-2.7 33.2 9.9a105 105 0 0 1 50.5 0c19.9-12.6 30.4-10.8 33.2-9.9 2.3.7 4.1 2.4 5 4.7 5 12.7 4 23.2 2.6 29.4 6.7 8.7 10 18.9 10 30.4 0 42.6-25.8 54.7-43.6 58.7 1.4 4.1 2.2 8.8 2.2 13.7l-.1 23.4v2.3"/><path fill="none" stroke-width="16" d="M160.9 185.7c1.4 4.1 2.2 8.8 2.2 13.7l-.1 23.4v2.3A98.6 98.6 0 1 0 61.4 205c-1.4-2.1-11.3-17.5-11.8-17.8-2.4-1.6-9.5-6.5-7.2-13.9 1.4-4.5 6-7.2 12.3-7.2h.8c4 .3 7.6 1.5 10.7 3.2-9.1-10.1-13.6-24.3-13.6-42.3 0-11.3 3.5-21.7 10.1-30.4A46.4 46.4 0 0 1 65 67.3a8.3 8.3 0 0 1 5-4.7c2.8-.9 13.3-2.7 33.2 9.9a105 105 0 0 1 50.5 0c19.9-12.6 30.4-10.8 33.2-9.9 2.3.7 4.1 2.4 5 4.7 5 12.7 4 23.2 2.6 29.4 6.7 8.7 10 18.9 10 30.4.1 42.6-25.8 54.7-43.6 58.6z"/><path fill="none" stroke-width="18.7" d="m170.1 203.3 17.3-12 17.2-18.7 9.5-26.6v-27.9l-9.5-27.5" /><path fill="none" stroke-width="22.7" d="m92.1 57.3 23.3-4.6 18.7-1.4 29.3 5.4m-110 32.6-8 16-4 21.4.6 20.3 3.4 13" /><path fill="none" stroke-width="13.3" d="M28.8 133a100 100 0 0 0 66.9 94.4v-8.7c-22.4 1.8-33-11.5-35.6-19.8-3.4-8.6-7.8-11.4-8.5-11.8"/></g></g> </svg> </a> </div> <div class="theme-toggle astro-dmqpwcec"> <theme-toggle class="astro-x3pjskd3"> <button class="astro-x3pjskd3"> <span class="sr-only astro-x3pjskd3">Dark theme</span> <span class="icon light astro-x3pjskd3"><svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><circle cx="128" cy="128" r="60" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="M128 36V16M63 63 49 49m-13 79H16m47 65-14 14m79 13v20m65-47 14 14m13-79h20m-47-65 14-14"/></g> </svg> </span> <span class="icon dark astro-x3pjskd3"><svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 256 256" aria-hidden="true" stroke="currentcolor" fill="currentcolor" class="astro-patnjmll"> <g class="astro-patnjmll"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="M216 112V64m24 24h-48m-24-64v32m16-16h-32m65 113A92 92 0 0 1 103 39h0a92 92 0 1 0 114 114Z"/></g> </svg> </span> </button> </theme-toggle> <script type="module">class n extends HTMLElement{constructor(){super();const t=this.querySelector("button"),s=e=>{document.documentElement.classList[e?"add":"remove"]("theme-dark"),t.setAttribute("aria-pressed",String(e)),document.documentElement.setAttribute("data-theme",e?"dark":"light"),localStorage.setItem("theme",e?"dark":"light")};t.addEventListener("click",()=>s(!this.isDark())),s(this.isDark())}isDark(){return document.documentElement.classList.contains("theme-dark")}}customElements.define("theme-toggle",n);</script> </div> </div> </div> </nav> <script type="module">class i extends HTMLElement{constructor(){super(),this.appendChild(this.querySelector("template").content.cloneNode(!0));const n=this.querySelector("button"),t=document.getElementById("menu-content");t.hidden=!0,t.classList.add("menu-content");const d=e=>{n.setAttribute("aria-expanded",e?"true":"false"),t.hidden=!e};n.addEventListener("click",()=>d(t.hidden));const s=e=>{d(e.matches),n.hidden=e.matches},c=window.matchMedia("(min-width: 50em)");s(c),c.addEventListener("change",s)}}customElements.define("menu-button",i);</script> <div class="stack gap-20 astro-xk6fhpz7"> <main class="wrapper stack gap-8 w-full astro-xk6fhpz7"> <div class="hero stack gap-4 center astro-bbe6dxrz"> <div class="stack gap-2 astro-bbe6dxrz"> <h1 class="title astro-bbe6dxrz">我的文章</h1> </div> </div> <div class="list-wrapper flex justify-center astro-nni2rj4u"> <div class="list w-full md:w-2/3 lg:w-1/2 astro-nni2rj4u"> <li class="astro-nni2rj4u"> <a href="/posts/astro-5" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">Astro 5.0 发布!</p> <div class="time astro-nni2rj4u"> 2024年12月4日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/svelte-5" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">svelte 5.0 全新响应式API</p> <div class="time astro-nni2rj4u"> 2024年10月24日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/deno-20" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">Deno2.0发布啦</p> <div class="time astro-nni2rj4u"> 2024年10月10日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/2024-mid-year-summary" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">2024 年中总结 & 为什么程序员要做个人品牌</p> <div class="time astro-nni2rj4u"> 2024年7月2日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/react-19-with-astro-actions" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">学习 React 19 新 Hook useActionState,并在 Astro 中使用</p> <div class="time astro-nni2rj4u"> 2024年6月26日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/astro-4110" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">Astro 4.11 发布!自定义500错误页面,Code 组件支持 Shiki 转换器</p> <div class="time astro-nni2rj4u"> 2024年6月21日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/zero-js-view-transitions" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">零 js 开启 View Transitions 动画</p> <div class="time astro-nni2rj4u"> 2024年6月12日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/astro-actions" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">详解 Astro Actions API,在客户端类型安全地调用后端函数</p> <div class="time astro-nni2rj4u"> 2024年5月15日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/add-comments-to-astro" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">为你的 Astro 博客添加评论功能</p> <div class="time astro-nni2rj4u"> 2024年4月18日 </div> </a> </li><li class="astro-nni2rj4u"> <a href="/posts/2024-q1-summary" class="astro-nni2rj4u"> <p class="title astro-nni2rj4u">2024 Q1 季度总结</p> <div class="time astro-nni2rj4u"> 2024年4月1日 </div> </a> </li> </div> </div> <div class="flex justify-center items-center astro-xk6fhpz7"> <a href="/posts/2" tabindex="0" class="group inline-block ml-4 select-none rounded-full border-2 w-8 h-8 flex items-center justify-center astro-xk6fhpz7" aria-label="Next" aria-disabled="false"> <svg xmlns="http://www.w3.org/2000/svg" class="/posts/2-svg w-6 h-6 fill-gray-100 astro-xk6fhpz7"> <path d="m11.293 17.293 1.414 1.414L19.414 12l-6.707-6.707-1.414 1.414L15.586 11H6v2h9.586z" class="astro-xk6fhpz7"></path> </svg> </a> </div> </main> </div> <footer class="astro-sz7xmlte"> <div class="group astro-sz7xmlte"> <p class="flex gap-2 items-center justify-center astro-sz7xmlte"> <a href="https://astro.build" class="astro-sz7xmlte"><img src="https://astro.badg.es/v2/built-with-astro/tiny.svg" alt="Built with Astro" width="120" height="20" class="astro-sz7xmlte"></a> </p> <p class="astro-sz7xmlte">© 2025 liruifengv</p> </div> <p class="socials astro-sz7xmlte"> <a href="https://twitter.com/liruifengv" class="astro-sz7xmlte"> Twitter</a> <a href="https://github.com/liruifengv" class="astro-sz7xmlte"> GitHub</a> <a href="/cdn-cgi/l/email-protection#264a4f54534f404348411716141266414b474f4a0845494b" class="astro-sz7xmlte"> Email</a> <a href="https://liruifengv.com/rss.xml" class="astro-sz7xmlte"> RSS</a> <a href="/year" class="astro-sz7xmlte"> Archive</a> </p> </footer> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script></body></html>