<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>喵落阁</title><description>奇迹只能一时，命运总是漫长。</description><link>https://astro-pure.js.org</link><item><title>Hexo备忘</title><link>https://astro-pure.js.org/blog/hexo-beiwang</link><guid isPermaLink="true">https://astro-pure.js.org/blog/hexo-beiwang</guid><description>Hexo 使用过程中的一些备忘事项和技巧</description><pubDate>Sat, 16 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Hexo 备忘&lt;/h1&gt;
&lt;h2&gt;我的配置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hexo 版本&lt;/strong&gt;: hexo-cli: 4.3.2, hexo: 7.3.0(当前最新)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node.js 版本&lt;/strong&gt;: 22.16.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git 版本&lt;/strong&gt;: 2.47.0.sindows.2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PNPM 版本&lt;/strong&gt;: 10.12.4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows 版本&lt;/strong&gt;: 11&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;安装 Node.js&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;a href=&quot;https://nodejs.org/en/download/&quot;&gt;官网&lt;/a&gt; 安装 LTS 版本，电脑一般来说内存足够直接在 C 盘即可，当然，换路径也可以，我反正正常下载换路径，没什么问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装完成后，检查是否安装成功。在键盘按下  win  +  R  键，输入 &lt;code&gt;CMD&lt;/code&gt;，然后回车，打开 CMD 窗口，执行 &lt;code&gt;node -v&lt;/code&gt; 命令，看到版本信息，则说明安装成功。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;安装 Git&lt;/h2&gt;
&lt;p&gt;在 &lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;官网&lt;/a&gt; 安装最新版本的 &lt;code&gt;64-bit Git for Windows Setup&lt;/code&gt; 安装包。&lt;/p&gt;
&lt;p&gt;安装完成后，在命令行输入 &lt;code&gt;git --version&lt;/code&gt;，如果显示版本号，则说明安装成功。&lt;/p&gt;
&lt;h3&gt;常用命令&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git config -l  //查看所有配置
git config --system --list //查看系统配置
git config --global --list //查看用户（全局）配置
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置 Git 用户名和邮箱&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git config --global user.name &quot;你的用户名&quot;
git config --global user.email &quot;你的邮箱&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安装 包管理器&lt;/h2&gt;
&lt;p&gt;安装 npm 为一切的基石，一般来说，你安装了 node，也相当于你安装了 npm，通过一下命令来验证：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm -v
node -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;修改 npm 源&lt;/strong&gt;。npm 下载各种模块，默认是从国外服务器下载，速度较慢，建议配置成淘宝镜像。打开 CMD 窗口，运行如下命令:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm config set registry https://registry.npm.taobao.org
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装 pnpm&lt;/h3&gt;
&lt;p&gt;pnpm 是一个快速、节省磁盘空间的包管理器，类似于 npm 和 yarn。安装 pnpm 可以通过以下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install -g pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为什么选择 pnpm？因为它的安装速度快，依赖管理更高效，且相对于 npm，我使用 npm 容易失败且慢，pnpm 给我的体验更好。&lt;/p&gt;
&lt;h2&gt;安装 Hexo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在 Git BASH 输入如下命令安装 Hexo：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm install -g hexo-cli
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;安装完后输入 &lt;code&gt;hexo -v&lt;/code&gt; 验证是否安装成功。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Github配置&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;上述操作是前提，接下来是配置 Github。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注册 github 就不说了，很基础的东西，连我个代码小白都懂就不多说了。&lt;/p&gt;
&lt;h3&gt;创建仓库&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;登录 GitHub，点击右上角的 &lt;code&gt;+&lt;/code&gt; 号，选择 &lt;code&gt;New repository&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;填写仓库名称，建议使用 &lt;code&gt;&amp;#x3C;username&gt;.github.io&lt;/code&gt; 格式（例如：&lt;code&gt;yourusername.github.io&lt;/code&gt;），这样可以直接作为个人主页。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里我不准备直接使用常规的 &lt;code&gt;hexo deploy&lt;/code&gt; 命令来部署到 GitHub Pages，因为当你的文章一多，生成时间就会繁琐，这里的建议是使用 &lt;code&gt;Github Actions&lt;/code&gt; 来自动部署。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这一部分的教程是源于 &lt;a href=&quot;https://akilar.top/posts/f752c86d/&quot;&gt;店长的文章&lt;/a&gt;，但是有点老旧了，于是我做了点更改（这里的图片来源于 &lt;a href=&quot;https://blog.anheyu.com/posts/asdx.html&quot;&gt;安知鱼&lt;/a&gt;）：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;首先要创建一个放置源码的私有仓库，以下称之为 &lt;code&gt;hexo-source&lt;/code&gt;，&lt;/li&gt;
&lt;li&gt;然后要生成一个 Github 密钥：&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;访问 Github-&gt; 头像（右上角）-&gt; Settings-&gt; Developer Settings-&gt; Personal access tokens-&gt; generate new token, 创建的 Token 名称随意，但必须勾选 repo 项 和 workflows 项。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;点击 &lt;a href=&quot;https://github.com/settings/tokens&quot;&gt;链接&lt;/a&gt; 前往生成&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.314926.xyz/images/2025/08/17/jiaoxue1.webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://img.314926.xyz/images/2025/08/17/jiaoxue2.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;p&gt;!!! token 只会显示这一次，之后将无法查看，所以务必保证你已经记录下了 Token。之后如果忘记了就只能重新生成重新配置了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;在 &lt;code&gt;hexo-source&lt;/code&gt; 仓库中的设置里点击设置 -&gt; action -&gt; General -&gt; 工作流程权限
&lt;ul&gt;
&lt;li&gt;勾选 &lt;code&gt;Read and write permissions&lt;/code&gt;，并且勾选 &lt;code&gt;Allow &amp;#x3C;span style=&quot;background:#FF0000;&quot;&gt;&amp;#x3C;/span&gt;all actions and reusable workflows&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在设置里 -&gt; Secrets and variables -&gt; Actions -&gt; New repository secret 添加&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GITHUBTOKEN&lt;/code&gt;：放置你刚才生成的 Token。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;上述是前置条件，接下来要先部署 hexo，你才好继续下一步。&lt;/h2&gt;
&lt;h2&gt;初始化 Hexo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在本地新建一个文件夹，例如 &lt;code&gt;hexo-solitude&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;这里我是用的是 vscode 打开该文件夹，然后在终端输入以下命令来初始化 Hexo：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hexo init (项目名称)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我一般都不填，直接在文件下下就可以开始，如果你添加了项目名称，那么下一步就是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd (项目名称)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;安装依赖包：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就是选择你想要的主题，这里我使用的是&lt;a href=&quot;https://solitude.js.org/cn/getting-started/installation&quot;&gt;Solitude&lt;/a&gt;，具体的配置不细讲，我只讲一部分：&lt;/p&gt;
&lt;p&gt;首先就是基本的安装，这里还是选择&lt;code&gt;git clone&lt;/code&gt;没有别的原因，主要还是会改点源码，不想改的直接pnpm下载即可：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-git&quot;&gt;// git安装
git clone -b dev https://github.com/everfu/hexo-theme-solitude.git themes/solitude

// pnpm 安装
pnpm i hexo-theme-solitude
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在&lt;code&gt;_config.yml&lt;/code&gt;里修改成：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;theme: solitude
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;配置&lt;/h2&gt;
&lt;p&gt;下列代码是我的备忘：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/

# Site
title: 喵落阁
subtitle: &apos;克喵的博客&apos;
description: &apos;愿你看清一切真相后，依旧热爱你的家人和朋友。&apos;
keywords: 克喵,kemiao,博客
author: 克喵爱吃卤面
language: zh-CN
timezone: &apos;Asia/Shanghai&apos;

# URL
## Set your site url here. For example, if you use GitHub Page, set url as &apos;https://username.github.io/project&apos;
url: # 填网站地址
permalink: posts/:abbrlink.html
permalink_defaults:
pretty_urls:
  trailing_index: true # Set to false to remove trailing &apos;index.html&apos; from permalinks
  trailing_html: true # Set to false to remove trailing &apos;.html&apos; from permalinks

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:

# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link:
  enable: true # Open external links in new tab
  field: site # Apply to the whole site
  exclude: &apos;&apos;
filename_case: 0
render_drafts: false
post_asset_folder: false
relative_link: false
future: true
syntax_highlighter: highlight.js
highlight:
  line_number: false
  auto_detect: false
  tab_replace: &apos;&apos;
  wrap: true
  hljs: false
prismjs:
  preprocess: true
  line_number: true
  tab_replace: &apos;&apos;

# Home page setting
# path: Root path for your blogs index page. (default = &apos;&apos;)
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
  path: &apos;&apos;
  per_page: 10
  order_by: -date

# Category &amp;#x26; Tag
default_category: uncategorized
category_map:
tag_map:

# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: true

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## updated_option supports &apos;mtime&apos;, &apos;date&apos;, &apos;empty&apos;
updated_option: &apos;mtime&apos;

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page

# Include / Exclude file(s)
## include:/exclude: options only apply to the &apos;source/&apos; folder
include: []
exclude: []
ignore: []

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: solitude

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
  type: git
  repo: git@github.com-xx:kemiaofxjun/kemiaofxjun.github.io.git
  branch: main

# RSS Feed 配置
feed:
  type: atom          # 生成 atom.xml
  path: atom.xml      # 输出文件名
  limit: 20           # 最多显示文章数 (0=全部)
  hub:                # PubSubHubbub 中心 (可选)
  content: true       # 是否包含全文内容 (true=是, false=仅摘要)
  content_limit: 140  # 摘要长度（当 content=false 时生效）
  content_limit_delim: &apos; &apos;  # 截断分隔符
  order_by: -date     # 按日期倒序排列
  autodiscovery: true # 在 HTML 头部添加自动发现标签

# 数学公式渲染配置
markdown:
  preset: &apos;default&apos; # 使用的 MD 语法，默认使用的 GFM
  render:
    html: true # 渲染 html
    xhtmlOut: false
    langPrefix: &apos;language-&apos; # 在代码块的类名中添加前缀（指定语言时）。
    breaks: true
    linkify: true # 如果你写了一个链接而不是 [name](link) 方式，会自动识别为链接并渲染。
    typographer: true # 将替换常见的印刷元素。
    quotes: &apos;“”‘’&apos; # 替换文章张的 &quot;&quot; &apos;&apos; 号
  enable_rules:
  disable_rules:
  plugins: # 使用插件
  anchors:
    level: 2 # 渲染标题的级别（h1,h2,h3）
    collisionSuffix: &apos;&apos;
    permalink: true
    permalinkClass: &apos;headerlink&apos;
    permalinkSide: &apos;left&apos;
    permalinkSymbol: &apos;&apos;
    case: 0
    separator: &apos;-&apos;
  images: # 图片的一些编译
    lazyload: true # 是否需要渲染 lazyload
    prepend_root: false
    post_asset: false
  inline: false

swpp:
  # 是否启用插件
  enable: true
  # 是否在发布前自动执行脚本
  auto_exec: true
  gen_dom: true

# 文章链接转数字或字母：https://github.com/rozbo/hexo-abbrlink
abbrlink:
    alg: crc16   #算法： crc16(default) and crc32
    rep: hex     #进制： dec(default) and hex: dec #输出进制：十进制和十六进制，默认为10进制。丨dec为十进制，hex

# https://github.com/hexojs/hexo-generator-sitemap
sitemap:
  path: sitemap.xml
  rel: false
  tags: true
  categories: true

algolia:
  appId: &quot;&quot;
  apiKey: &quot;&quot;
  adminApiKey: &quot;&quot;
  chunkSize: 5000
  indexName: &quot;index-name&quot;
  fields:
    - content:strip:truncate,0,500
    - excerpt:strip
    - gallery
    - permalink
    - photos
    - slug
    - tags
    - title

# hexo-safego安全跳转插件
# see https://blog.liushen.fun/posts/1dfd1f41/
hexo_safego:
  # 基本功能设置
  general:
    enable: true                # 启用插件
    enable_base64_encode: true  # 使用 Base64 编码
    enable_target_blank: true   # 从新窗口打开跳转页面

  # 安全设置
  security:
    url_param_name: &apos;u&apos;         # URL 参数名
    html_file_name: &apos;go.html&apos;   # 重定向页面的文件名
    ignore_attrs:               # 忽略处理的 HTML 结构
      - &apos;data-fancybox&apos;

  # 容器与页面设置
  scope:
    apply_containers:           # 应用的容器选择器
      - &apos;#article-container&apos;
    apply_pages:                # 应用的页面路径
      - &quot;/posts/&quot;
      - &quot;/devices/&quot;
    exclude_pages:              # 排除的页面路径

  # 域名白名单
  whitelist:
    domain_whitelist:           # 允许的白名单域名，通过字符串匹配实现
      - &quot;kemeow.top&quot;
      - &quot;kemiaosw.top&quot;
      - &quot;050815.xyz&quot;
      - &quot;314926.xyz&quot;
      - &quot;051531.xyz&quot;

  # 页面外观设置
  appearance:
    avatar: https://img.314926.xyz/images/2025/08/13/no-background-kemiaofxjun.webp   # 跳转页面头像路径
    title: &quot;喵洛阁&quot;            # 跳转页面标题
    subtitle: &quot;安全中心&quot;         # 跳转页面副标题
    darkmode: auto              # 是否启用深色模式
    countdowntime: 4            # 跳转页面倒计时秒数，如果设置为负数则为不自动跳转

  # 调试设置
  debug:
    enable: false               # 启用调试模式

# 追番插件
# https://github.com/HCLonely/hexo-bilibili-bangumi
bangumi: # 追番设置
  enable: true
  source: bili
  path: 
  vmid: 3546643173477234
  title: &quot;追番列表&quot;
  quote: &quot;生命不息，追番不止！&quot;
  show: 1
  lazyload: false
  loading:
  showMyComment: true
  pagination: false
  extra_options:
    top_img: false
    lazyload:
      enable: false

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;博客的其他修改基本就是来自教程和一些博主的网站。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;插件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基础依赖&lt;/strong&gt; &lt;code&gt;hexo-renderer-pug&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-renderer-pug
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;字数统计&lt;/strong&gt; &lt;code&gt;hexo-wordcount&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-wordcount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置里修改：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# --------------------------- start ---------------------------
# Word count
# 字数统计
# warning: Please install the hexo-wordcount plugin first.
# 警告: 请先安装 hexo-wordcount 插件。
wordcount: false
# --------------------------- end ---------------------------
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;数学公式&lt;/strong&gt; 卸载 &lt;code&gt;hexo-render-marked&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm un hexo-renderer-marked
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装 &lt;code&gt;hexo-renderer-markdown-it&lt;/code&gt; &lt;code&gt;katex&lt;/code&gt; &lt;code&gt;@renbaoshuo/markdown-it-katex&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-renderer-markdown-it katex @renbaoshuo/markdown-it-katex
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置里修改&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# --------------------------- start ---------------------------
# Katex
# Latex formula support
# Latex 公式支持
katex:
  enable: false
  # Whether to load on each page
  # 是否在每个页面加载
  per_page: false
  # Whether to enable copy formula
  # 是否启用复制公式
  copytex: false
# --------------------------- end ---------------------------
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;添加以下内容到 &lt;code&gt;_config.yml&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;markdown:
  preset: &apos;default&apos;
  render:
    html: true
    xhtmlOut: false
    langPrefix: &apos;language-&apos;
    breaks: true
    linkify: true
    typographer: true
    quotes: &apos;“”‘’&apos;
  enable_rules:
  disable_rules:
  plugins:
    - &apos;@renbaoshuo/markdown-it-katex&apos;
  anchors:
    level: 2
    collisionSuffix: &apos;&apos;
    permalink: false
    permalinkClass: &apos;header-anchor&apos;
    permalinkSide: &apos;left&apos;
    permalinkSymbol: &apos;¶&apos;
    case: 0
    separator: &apos;-&apos;
  images:
    lazyload: false
    prepend_root: false
    post_asset: false
  inline: false  # https://markdown-it.github.io/markdown-it/#MarkdownIt.renderInline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开启配置项&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# --------------------------- start ---------------------------
# Katex
# Latex formula support
# Latex 公式支持
katex:
  enable: true
  # Whether to load on each page
  # 是否在每个页面加载
  per_page: true
  # Whether to enable copy formula
  # 是否启用复制公式
  copytex: false
# --------------------------- end ---------------------------

&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;PWA&lt;/strong&gt; 安装 hexo-swpp 和 swpp-backends 插件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在博客根目录执行&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-swpp 

pnpm i swpp-backends
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开启配置&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# 大约在773行
# --------------------------- start ---------------------------
# PWA
# Progressive Web App
pwa:
  enable: true
  manifest: /manifest.json # manifest.json
  theme_color: &quot;#006a73&quot; # Theme color
  mask_icon: /img/pwa/favicon.png # Mask icon
  apple_touch_icon: /img/pwa/favicon.png # Apple touch icon
  bookmark_icon: /img/pwa/favicon.png # Bookmark icon
  favicon_32_32: /img/pwa/favicon_32.png # 32x32 icon
  favicon_16_16: /img/pwa/favicon_16.png # 16x16 icon
# --------------------------- end ---------------------------

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;里添加swpp配置&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;swpp:
  # 是否启用插件
  enable: true
  # 是否在发布前自动执行脚本
  auto_exec: true
  gen_dom: true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 &lt;code&gt;source&lt;/code&gt; 目录中创建 &lt;code&gt;manifest.json&lt;/code&gt; 文件&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
    &quot;name&quot;: &quot;网站名称&quot;,
    &quot;short_name&quot;: &quot;网站名称缩写&quot;,
    &quot;theme_color&quot;: &quot;#006a73&quot;,
    &quot;background_color&quot;: &quot;#006a73&quot;,
    &quot;display&quot;: &quot;fullscreen&quot;,
    &quot;scope&quot;: &quot;/&quot;,
    &quot;start_url&quot;: &quot;/&quot;,
    &quot;id&quot;: &quot;/&quot;,
    &quot;icons&quot;: [
      {
        &quot;src&quot;: &quot;/img/pwa/favicon_16.png&quot;,
        &quot;sizes&quot;: &quot;16x16&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;any&quot;
      },
      {
        &quot;src&quot;: &quot;/img/pwa/favicon_16.png&quot;,
        &quot;sizes&quot;: &quot;16x16&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;maskable&quot;
      },
      {
        &quot;src&quot;: &quot;/img/pwa/favicon_32.png&quot;,
        &quot;sizes&quot;: &quot;32x32&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;any&quot;
      },
      {
        &quot;src&quot;: &quot;/img/pwa/favicon_32.png&quot;,
        &quot;sizes&quot;: &quot;32x32&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;maskable&quot;
      },
      {
        &quot;src&quot;: &quot;/img/pwa/favicon.png&quot;,
        &quot;sizes&quot;: &quot;180x180&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;any&quot;
      },
      {
        &quot;src&quot;: &quot;/img/pwa/favicon.png&quot;,
        &quot;sizes&quot;: &quot;180x180&quot;,
        &quot;type&quot;: &quot;image/png&quot;,
        &quot;purpose&quot;: &quot;maskable&quot;
      }
    ],
    &quot;splash_pages&quot;: null
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在博客根目录创建一个 &lt;code&gt;sw-rules.js&lt;/code&gt; 文件&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;module.exports.config = {
  /** @type {?ServiceWorkerConfig|boolean} */
  serviceWorker: {
    escape: 1,
    cacheName: &apos;SolitudeCache&apos;,
    debug: false,
  },
  register: {
    onsuccess: undefined,
    onerror: () =&gt;
      console.error(
        &apos;Service Worker 注册失败！可能是由于您的浏览器不支持该功能！&apos;
      ),
    builder: (root, framework, pluginConfig) =&gt; {
      const { onerror, onsuccess } = pluginConfig.register;
      return `
            &amp;#x3C;script&gt;
                (() =&gt; {
                    const sw = navigator.serviceWorker;
                    const error = ${onerror &amp;#x26;&amp;#x26; onerror.toString()};
                    if (!sw?.register(&apos;${new URL(root).pathname}sw.js&apos;)
                        ${onsuccess ? `?.then(${onsuccess.toString()})` : &quot;&quot;}
                        ?.catch(error)
                    ) error()
                })()
            &amp;#x3C;/script&gt;`;
    },
  },
  /** @type {?DomConfig|boolean} */
  dom: {
    /** @type {?VoidFunction} */
    onsuccess: () =&gt; {
      caches
        .match(&apos;https://id.v3/&apos;)
        .then((res) =&gt; {
          if (res)
            res.json().then((json) =&gt; {
              utils &amp;#x26;&amp;#x26;
                utils.snackbarShow(
                  `已刷新缓存，更新为${json.escape + &apos;.&apos; + json.global + &apos;.&apos; + json.local
                  }版本最新内容`,
                  false,
                  2500
                );
            });
          else console.info(&apos;未找到缓存&apos;);
        })
        .catch((error) =&gt; console.error(&apos;缓存匹配出错&apos;, error));
    },
  },
  /** @type {?VersionJsonConfig|boolean} */
  json: {
    /** @type {number} */
    maxHtml: 15,
    /** @type {number} */
    charLimit: 1024,
    /** @type {string[]} */
    merge: [],
    exclude: {
      /** @type {RegExp[]} */
      localhost: [],
      /** @type {RegExp[]} */
      other: [],
    },
  },
  /** @type {?ExternalMonitorConfig|boolean} */
  external: {
    /** @type {number} */
    timeout: 5000,
    /** 拉取文件时地并发限制 */
    concurrencyLimit: 100,
    /** @type {({head: string, tail: string}|function(string):string[])[]} */
    js: [],
    /** @type {RegExp[]} */
    stable: [
      /^https:\/\/npm\.elemecdn\.com\/[^/@]+\@[^/@]+\/[^/]+\/[^/]+$/,
      /^https:\/\/cdn\.cbd\.int\/[^/@]+\@[^/@]+\/[^/]+\/[^/]+$/,
      /^https:\/\/cdn\.jsdelivr\.net\/npm\/[^/@]+\@[^/@]+\/[^/]+\/[^/]+$/,
    ],
    replacer: (srcUrl) =&gt; {
      if (srcUrl.startsWith(&apos;https://cdn.jsdelivr.net/npm/&apos;)) {
        const pathname = new URL(srcUrl).pathname;
        return [
          srcUrl,
          `https://cdn.cbd.int/${pathname}`,
          `https://npm.elemecdn.com/${pathname}`,
          `https://fastly.jsdelivr.net/npm/${pathname}`,
        ];
      } else {
        return srcUrl;
      }
    },
  },
};

module.exports.cacheRules = {
  simple: {
    clean: true,
    search: false,
    match: (url, $eject) =&gt;
      url.host === $eject.domain &amp;#x26;&amp;#x26; [&apos;/404.html&apos;].includes(url.pathname),
  },
  cdn: {
    clean: true,
    match: (url) =&gt;
      [
        &apos;cdn.cbd.int&apos;,
        &apos;lf26-cdn-tos.bytecdntp.com&apos;,
        &apos;lf6-cdn-tos.bytecdntp.com&apos;,
        &apos;lf3-cdn-tos.bytecdntp.com&apos;,
        &apos;lf9-cdn-tos.bytecdntp.com&apos;,
        &apos;cdn.staticfile.org&apos;,
        &apos;npm.elemecdn.com&apos;,
      ].includes(url.host) &amp;#x26;&amp;#x26;
      url.pathname.match(/\.(js|css|woff2|woff|ttf|cur)$/),
  },
};

module.exports.getSpareUrls = (srcUrl) =&gt; {
  if (srcUrl.startsWith(&apos;https://npm.elemecdn.com&apos;)) {
    return {
      timeout: 3000,
      list: [
        srcUrl,
        `https://fastly.jsdelivr.net/${new URL(srcUrl).pathname}`,
      ],
    };
  }
};

module.exports.ejectValues = (hexo, rules) =&gt; {
  return {
    domain: {
      prefix: &apos;const&apos;,
      value: new URL(hexo.config.url).host,
    },
  };
};

module.exports.skipRequest = (request) =&gt; request.url.startsWith(&quot;https://i0.hdslb.com&quot;) ||
  request.url.startsWith(&apos;https://meting.qjqq.cn&apos;) ||
  request.url.startsWith(&apos;https://api.i-meto.com&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/hexojs/hexo-deployer-git&quot;&gt;hexo-deploy-git&lt;/a&gt;&lt;/strong&gt; 提交到git的插件&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-deploy-git --save
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/hexojs/hexo-generator-feed&quot;&gt;hexo-generator-feed&lt;/a&gt;&lt;/strong&gt; hexo的rss插件&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-generator-feed --save
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ohroy/hexo-abbrlink&quot;&gt;hexo 的短链接&lt;/a&gt;&lt;/strong&gt;: &lt;code&gt;hexo-abbrlink&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-abbrlink --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;里修改：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;permalink: posts/:abbrlink/ 
# or
permalink: posts/:abbrlink.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;添加:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# abbrlink config
abbrlink:
  alg: crc32      # Algorithm used to calc abbrlink. Support crc16(default) and crc32
  rep: hex        # Representation of abbrlink in URLs. Support dec(default) and hex
  drafts: false   # Whether to generate abbrlink for drafts. (false in default)
  force: false    # Enable force mode. In this mode, the plugin will ignore the cache, and calc the abbrlink for every post even it already had an abbrlink. (false in default)
  writeback: true # Whether to write changes to front-matters back to the actual markdown files. (true in default)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/hexojs/hexo-generator-sitemap&quot;&gt;博客的sitemap&lt;/a&gt;&lt;/strong&gt; : &lt;code&gt;hexo-generator-sitemap&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-generator-sitemap --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;里添加配置：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;sitemap:
  path: 
    - sitemap.xml
    - sitemap.txt
  template: ./sitemap_template.xml
  template_txt: ./sitemap_template.txt
  rel: false
  tags: true
  categories: true
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;9&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mebi.me/hexo-with-algolia&quot;&gt;&lt;strong&gt;使用algolia搜索&lt;/strong&gt;&lt;/a&gt; : &lt;code&gt;hexo-algoliasearch&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;注册algolia：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注册地址：&lt;a href=&quot;https://dashboard.algolia.com/users/sign_up&quot;&gt;dashboard.algolia.com/users/sign_up&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建应用：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注册成功后创建应用：&lt;a href=&quot;https://dashboard.algolia.com/account/plan/create?from=dashboard&quot;&gt;dashboard.algolia.com/account/plan/create?from=dashboard&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;search -&gt; configure -&gt; index添加index_name即可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在博客执行命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-algoliasearch --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;_config.yml&lt;/code&gt;里添加&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;algolia:
  appId: &quot;Z7A3XW4R2I&quot;
  apiKey: &quot;12db1ad54372045549ef465881c17e743&quot;
  adminApiKey: &quot;40321c7c207e7f73b63a19aa24c4761b&quot;
  chunkSize: 5000
  indexName: &quot;my-hexo-blog&quot;
  fields:
    - content:strip:truncate,0,500
    - excerpt:strip
    - gallery
    - permalink
    - photos
    - slug
    - tags
    - title
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;!!!配置完成后记得运行 &lt;code&gt;hexo clean&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在&lt;code&gt;hexo g &lt;/code&gt;后实行下列代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hexo algolia
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;ol start=&quot;10&quot;&gt;
&lt;li&gt;**&lt;a href=&quot;https://blog.liushen.fun/posts/1dfd1f41/&quot;&gt;hexo-safego&lt;/a&gt;**安全跳转插件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用该插件之前，需要先安装 &lt;code&gt;cheerio&lt;/code&gt;，&lt;code&gt;cheerio&lt;/code&gt; 是一个轻量级的库，用于在服务器端快速、灵活地实现 jQuery 核心功能。在 &lt;code&gt;hexo-safego&lt;/code&gt; 插件中，&lt;code&gt;cheerio&lt;/code&gt; 被用来解析和操作生成的静态 HTML 内容，类似于在浏览器中使用 jQuery 处理 DOM 元素。这使得插件能够在生成静态页面时，处理和替换外部链接，增强博客的安全性，而不需要在客户端引入 jQuery。Hexo 一般都有这个插件，可以在 &lt;code&gt;node_modules&lt;/code&gt; 查看，如果没有，请先执行：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i cheerio --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后即可安装该插件：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-safego --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在&lt;code&gt;hexo&lt;/code&gt;根目录的&lt;code&gt;_config.yml&lt;/code&gt;文件中添加以下配置：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# hexo-safego安全跳转插件
# see https://blog.liushen.fun/posts/1dfd1f41/
hexo_safego:
  # 基本功能设置
  general:
    enable: true                # 启用插件
    enable_base64_encode: true  # 使用 Base64 编码
    enable_target_blank: true   # 打开新窗口
  # 安全设置
  security:
    url_param_name: &apos;u&apos;         # URL 参数名
    html_file_name: &apos;go.html&apos;   # 重定向页面的文件名
    ignore_attrs:               # 忽略处理的 HTML 属性
      - &apos;data-fancybox&apos;
  # 容器与页面设置
  scope:
    apply_containers:           # 应用的容器选择器
      - &apos;#article-container&apos;
    apply_pages:                # 应用的页面路径
      - &quot;/posts/&quot;
      - &quot;/devices/&quot;
    exclude_pages:              # 排除的页面路径
  # 域名白名单
  whitelist:
    domain_whitelist:           # 允许的白名单域名
      - &quot;qyliu.top&quot;
      - &quot;liushen.fun&quot;
  # 页面外观设置
  appearance:
    avatar: /info/avatar.ico    # 头像路径
    title: &quot;清羽飞扬&quot;            # 页面标题
    subtitle: &quot;安全中心&quot;         # 页面副标题
    darkmode: true              # 是否启用深色模式
    countdowntime: -1           # 倒计时秒数
  # 调试设置
  debug:
    enable: false               # 启用调试模式
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;11&quot;&gt;
&lt;li&gt;&lt;strong&gt;hexo的追番页面&lt;/strong&gt;：&lt;a href=&quot;https://github.com/HCLonely/hexo-bilibili-bangumi&quot;&gt;hexo-bilibili-bangumi&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm i hexo-bilibili-bangumi --save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;配置：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;bangumi: # 追番设置
  enable: true           # 是否启用
  source: bili          # 数据源
  path: bangumis/index.html  # 页面路径
  vmid:                 # 用户ID
  title: &apos;追番列表&apos;      # 页面标题
  quote: &apos;生命不息，追番不止！&apos; # 页面引言
  show: 1              # 初始显示页面: 0=想看, 1=在看, 2=看过
  lazyload: true       # 是否启用图片懒加载
  metaColor:           # meta 信息字体颜色
  color:               # 简介字体颜色
  webp: true          # 是否使用 webp 格式图片
  progress: true      # 是否显示进度条
  ...
cinema: # 追剧设置
  enable: true           # 是否启用
  source: bili
  ...
game: # 游戏设置，仅支持source: bgmv0
  enable: true           # 是否启用
  source: bgmv0
  ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还在更新中。。。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Github action配置&lt;/h2&gt;
&lt;p&gt;承接&lt;a href=&quot;#github-config&quot;&gt;段落&lt;/a&gt;的继续吧，未来会在~~出~~水一期。&lt;/p&gt;
&lt;p&gt;接下来就是创建一个私有仓库，根据大佬的文章，是为了保护&lt;strong&gt;Token&lt;/strong&gt;，见仁见智。&lt;/p&gt;
&lt;p&gt;这个私有仓库的建立是存储Hexo博客代码，如果你要使用&lt;a href=&quot;https://github.com/Qexo/Qexo&quot;&gt;Qexo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;，这也是必不可少的！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.314926.xyz/images/2025/08/19/hexo-beiwang1.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;创建完成后，需要把博客的源码 push 到这里。首先获取远程仓库地址，此处虽然 SSH 和 HTTPS 均可。SSH 在绑定过 ssh key 的设备上无需再输入密码，HTTPS 则需要输入密码，但是 SSH 偶尔会遇到端口占用的情况。请自主选择。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.314926.xyz/images/2025/08/19/hexo-beiwang2.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;/p&gt;
&lt;p&gt;这里之所以是私有仓库，是因为在接下来的配置中会用到 &lt;code&gt;Token&lt;/code&gt;，如果 &lt;code&gt;Token&lt;/code&gt; 被盗用，别人可以肆意操作你的 github 仓库内容，为了避免这一风险，才选择的博客源码闭源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;配置 Github Action&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;code&gt;[Blogroot]&lt;/code&gt;新建&lt;code&gt;.github&lt;/code&gt;文件夹,注意开头是有个&lt;code&gt;.&lt;/code&gt;的。然后在&lt;code&gt;.github&lt;/code&gt; 内新建 &lt;code&gt;workflows&lt;/code&gt; 文件夹，再在 &lt;code&gt;workflows&lt;/code&gt; 文件夹内新建 &lt;code&gt;autodeploy.yml&lt;/code&gt;,在&lt;code&gt;[Blogroot]/.github/workflows/autodeploy.yml&lt;/code&gt; 里面输入&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;# 当有改动推送到 main 分支时，启动 Action
name: 自动部署

on:
  push:
    branches:
      - main # 自选分支

  release:
    types:
      - published

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检查分支
        uses: actions/checkout@v4
        with:
          ref: main # 自选分支

      - name: 安装 Node
        uses: actions/setup-node@v4
        with:
          node-version: &quot;22.x&quot; # node版本

      - name: 安装 Hexo
        run: |
          export TZ=&apos;Asia/Shanghai&apos;
          npm install hexo-cli -g
          npm install yamljs --save

      - name: 缓存 Hexo
        uses: actions/cache@v4
        id: cache
        with:
          path: node_modules
          key: ${{ runner.os }}-node-${{ hashFiles(&apos;**/package-lock.json&apos;) }}

      - name: 安装依赖
        if: steps.cache.outputs.cache-hit != &apos;true&apos;
        run: |
          npm install --save
          npm install hexo-algoliasearch --save
          npm install hexo-bilibili-bangumi --save

      - name: 生成静态文件
        run: |
          node ./link.js
          hexo clean
          hexo generate
          hexo bangumi -u
          hexo algolia

      - name: 部署
        run: |
          cd ./public
          git init -b main
          git config --global user.name &apos;${{ secrets.GITHUBUSERNAME }}&apos;
          git config --global user.email &apos;${{ secrets.GITHUBEMAIL }}&apos;
          git add .
          git commit -m &quot;${{ github.event.head_commit.message }} $(date +&quot;%Z %Y-%m-%d %A %H:%M:%S&quot;) Updated by GitHub Actions&quot;
          git push --force --quiet &quot;https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git&quot; main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上述代码是来自&lt;a href=&quot;https://akilar.top/posts/f752c86d/&quot;&gt;店长&lt;/a&gt;的修改自用，为什么不用&lt;a href=&quot;https://blog.anheyu.com/posts/asdx.html&quot;&gt;安知鱼&lt;/a&gt;的？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先把Token直接放在仓库的文件里还是不太好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;像我这种在本地搞的，推不到仓库里，因为这里的token不能直接上传，我尝试过把&lt;code&gt;token: &lt;/code&gt;改成&lt;code&gt;token: ${{ servets.GH_token }}&lt;/code&gt;，但是依旧有各种问题，相反使用了店长的代码后，就大差不差，询问AI后就得到目前的代码，也就可以正式上传了。（无拉踩的意思）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;之后需要自己到仓库的 Settings-&gt;Secrets-&gt;actions 下添加环境变量，变量名参考脚本中出现的，依次添加。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://img.314926.xyz/images/2025/08/19/hexo-beiwang3.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;重新设置远程仓库和分支&lt;/h3&gt;
&lt;h1&gt;挖坑&lt;/h1&gt;
&lt;p&gt;大致写到这，未来或许会有~~下一章~~挖坑？但是目前通用的就到这，然后后续会写Qexo的简单使用方法、solitude的一些配置更改和我踩坑经历吧。&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/08/20/hexo-beiwang-topic.webp"/><enclosure url="https://img.314926.xyz/images/2025/08/20/hexo-beiwang-topic.webp"/></item><item><title>Markdown 强调语法</title><link>https://astro-pure.js.org/blog/markdown-qiangdiao</link><guid isPermaLink="true">https://astro-pure.js.org/blog/markdown-qiangdiao</guid><description>Markdown 强调语法，如何使用星号和下划线进行文本强调</description><pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;原文链接: https://markdown.com.cn/basic-syntax/emphasis.html&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Markdown 强调语法&lt;/h2&gt;
&lt;p&gt;通过将文本设置为粗体或斜体来强调其重要性。&lt;/p&gt;
&lt;h3&gt;粗体（Bold）&lt;/h3&gt;
&lt;p&gt;要加粗文本，请在单词或短语的前后各添加两个星号（asterisks）或下划线（underscores）。如需加粗一个单词或短语的中间部分用以表示强调的话，请在要加粗部分的两侧各添加两个星号（asterisks）。&lt;/p&gt;
&lt;p&gt;| Markdown语法 | HTML | 预览效果 |
| :---: | :---: | :---: |
| &lt;code&gt;I just love **bold text**.&lt;/code&gt; |	&lt;code&gt;I just love &amp;#x3C;strong&gt;bold text&amp;#x3C;/strong&gt;.&lt;/code&gt; |	I just love &lt;strong&gt;bold text&lt;/strong&gt;. |
| &lt;code&gt;I just love __bold text__.&lt;/code&gt; |	&lt;code&gt;I just love &amp;#x3C;strong&gt;bold text&amp;#x3C;/strong&gt;.&lt;/code&gt; |	I just love &lt;strong&gt;bold text&lt;/strong&gt;. |
| &lt;code&gt;Love**is**bold&lt;/code&gt; |	&lt;code&gt;Love&amp;#x3C;strong&gt;is&amp;#x3C;/strong&gt;bold&lt;/code&gt; |	Love &lt;strong&gt;is&lt;/strong&gt; bold |&lt;/p&gt;
&lt;h3&gt;粗体（Bold）用法最佳实践&lt;/h3&gt;
&lt;p&gt;Markdown 应用程序在如何处理单词或短语中间的下划线上并不一致。为兼容考虑，在单词或短语中间部分加粗的话，请使用星号（asterisks）。&lt;/p&gt;
&lt;p&gt;| ✅  Do this	 | ❌  Don&apos;t do this |
| :---: | :---: |
| &lt;code&gt;Love**is**bold&lt;/code&gt; |	&lt;code&gt;Love__is__bold&lt;/code&gt; |&lt;/p&gt;
&lt;h3&gt;斜体（Italic）&lt;/h3&gt;
&lt;p&gt;要用斜体显示文本，请在单词或短语前后添加一个星号（asterisk）或下划线（underscore）。要斜体突出单词的中间部分，请在字母前后各添加一个星号，中间不要带空格。&lt;/p&gt;
&lt;p&gt;|Markdown语法 |	HTML |	预览效果 |
| :---: | :---: | :---: |
|&lt;code&gt;This text is ***really important***.&lt;/code&gt;|&lt;code&gt;This text is &amp;#x3C;strong&gt;&amp;#x3C;em&gt;really important&amp;#x3C;/em&gt;&amp;#x3C;/strong&gt;.&lt;/code&gt;|	This text is &lt;em&gt;&lt;strong&gt;really important&lt;/strong&gt;&lt;/em&gt;.|
|&lt;code&gt;This text is ___really important___.&lt;/code&gt;|	&lt;code&gt;This text is &amp;#x3C;strong&gt;&amp;#x3C;em&gt;really important&amp;#x3C;/em&gt;&amp;#x3C;/strong&gt;.&lt;/code&gt; |	This text is &lt;em&gt;&lt;strong&gt;really important&lt;/strong&gt;&lt;/em&gt;.|
|&lt;code&gt;This text is __*really important*__.&lt;/code&gt; |	&lt;code&gt;This text is &amp;#x3C;strong&gt;&amp;#x3C;em&gt;really important&amp;#x3C;/em&gt;&amp;#x3C;/strong&gt;.&lt;/code&gt; |	This text is &lt;strong&gt;&lt;em&gt;really important&lt;/em&gt;&lt;/strong&gt;. |
|&lt;code&gt;This text is **_really important_**.&lt;/code&gt; |	&lt;code&gt;This text is &amp;#x3C;strong&gt;&amp;#x3C;em&gt;really important&amp;#x3C;/em&gt;&amp;#x3C;/strong&gt;.&lt;/code&gt; |	This text is &lt;strong&gt;&lt;em&gt;really important&lt;/em&gt;&lt;/strong&gt;. |
|&lt;code&gt;This is really***very***important text.&lt;/code&gt;|	&lt;code&gt;This is really&amp;#x3C;strong&gt;&amp;#x3C;em&gt;very&amp;#x3C;/em&gt;&amp;#x3C;/strong&gt;important text.&lt;/code&gt;|	This is really &lt;em&gt;&lt;strong&gt;very&lt;/strong&gt;&lt;/em&gt; important text.|&lt;/p&gt;
&lt;h3&gt;粗体（Bold）和斜体（Italic）用法的最佳实践&lt;/h3&gt;
&lt;p&gt;Markdown 应用程序在处理单词或短语中间添加的下划线上并不一致。为了实现兼容性，请使用星号将单词或短语的中间部分加粗并以斜体显示，以示重要。&lt;/p&gt;
&lt;p&gt;|✅  Do this|	❌  Don&apos;t do this|
| :---: | :---: |
|&lt;code&gt;This is really***very***important text.&lt;/code&gt;|	&lt;code&gt;This is really___very___important text.&lt;/code&gt;|&lt;/p&gt;</content:encoded><h:img src="https://imgtg.kemeow.top/file/AgACAgUAAyEGAAScqokCAAMKaHj_h2rkMAABtcX1LDXzMH-mlLSFAAIXyTEbCpvIV1d2cz5UpNogAQADAgADeQADNgQ.webp"/><enclosure url="https://imgtg.kemeow.top/file/AgACAgUAAyEGAAScqokCAAMKaHj_h2rkMAABtcX1LDXzMH-mlLSFAAIXyTEbCpvIV1d2cz5UpNogAQADAgADeQADNgQ.webp"/></item><item><title>Markdown 换行语法</title><link>https://astro-pure.js.org/blog/markdown-huanhang</link><guid isPermaLink="true">https://astro-pure.js.org/blog/markdown-huanhang</guid><description>Markdown 换行语法，如何创建换行以及最佳实践</description><pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;原文链接: https://markdown.com.cn/basic-syntax/line-breaks.html&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Markdown 换行语法&lt;/h2&gt;
&lt;p&gt;在一行的末尾添加两个或多个空格，然后按回车键,即可创建一个换行(&lt;code&gt;&amp;#x3C;br&gt;&lt;/code&gt;)。&lt;/p&gt;
&lt;p&gt;| Markdown语法 |	HTML |	预览效果 |
| :---: | :---: | :---: |
| &lt;code&gt;This is the first line.  &lt;/code&gt;  &lt;code&gt;And this is the second line.&lt;/code&gt; | &lt;code&gt;&amp;#x3C;p&gt;This is the first line.&amp;#x3C;br&gt;&lt;/code&gt;&lt;code&gt; And this is the second line.&amp;#x3C;/p&gt;&lt;/code&gt; | This is the first line. And this is the second line. |&lt;/p&gt;
&lt;h2&gt;换行（Line Break）用法的最佳实践&lt;/h2&gt;
&lt;p&gt;几乎每个 Markdown 应用程序都支持两个或多个空格进行换行，称为 &lt;code&gt;结尾空格（trailing whitespace)&lt;/code&gt; 的方式，但这是有争议的，因为很难在编辑器中直接看到空格，并且很多人在每个句子后面都会有意或无意地添加两个空格。由于这个原因，你可能要使用除结尾空格以外的其它方式来换行。幸运的是，几乎每个 Markdown 应用程序都支持另一种换行方式：HTML 的 &lt;code&gt;&amp;#x3C;br&gt;&lt;/code&gt; 标签。&lt;/p&gt;
&lt;p&gt;为了兼容性，请在行尾添加“结尾空格”或 HTML 的 &lt;code&gt;&amp;#x3C;br&gt;&lt;/code&gt; 标签来实现换行。&lt;/p&gt;
&lt;p&gt;还有两种其他方式我并不推荐使用。CommonMark 和其它几种轻量级标记语言支持在行尾添加反斜杠 (&lt;code&gt;\&lt;/code&gt;) 的方式实现换行，但是并非所有 Markdown 应用程序都支持此种方式，因此从兼容性的角度来看，不推荐使用。并且至少有两种轻量级标记语言支持无须在行尾添加任何内容，只须键入回车键（&lt;code&gt;return&lt;/code&gt;）即可实现换行。&lt;/p&gt;
&lt;p&gt;| ✅  Do this | ❌  Don&apos;t do this |
| :---: | :---: |
| &lt;code&gt;First line with two spaces after.  &lt;/code&gt; &lt;code&gt;And the next line.&lt;/code&gt; | &lt;code&gt;First line with a backslash after.\&lt;/code&gt;  &lt;code&gt;And the next line.&lt;/code&gt; |
| &lt;code&gt;First line with the HTML tag after.&amp;#x3C;br&gt;&lt;/code&gt; &lt;code&gt;And the next line.&lt;/code&gt; | &lt;code&gt;First line with nothing after.&lt;/code&gt; &lt;code&gt;And the next line.&lt;/code&gt; |&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/markdown-huanhang.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/markdown-huanhang.webp"/></item><item><title>Markdown 段落语法</title><link>https://astro-pure.js.org/blog/markdown-duanluo</link><guid isPermaLink="true">https://astro-pure.js.org/blog/markdown-duanluo</guid><description>Markdown 段落语法，如何创建段落以及最佳实践</description><pubDate>Thu, 13 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;原文位置: https://markdown.com.cn/basic-syntax/paragraphs.html&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Markdown 段落&lt;/h2&gt;
&lt;p&gt;要创建段落，请使用空白行将一行或多行文本进行分隔。&lt;/p&gt;
&lt;p&gt;|Markdown语法|HTML|预览效果|
|---|---|---|
|&lt;code&gt;I really like using Markdown.&lt;/code&gt;|&lt;code&gt;&amp;#x3C;p&gt;I really like using Markdown.&amp;#x3C;/p&gt;&lt;/code&gt;|I really like using Markdown.|
|&lt;code&gt;I think I&apos;ll use it to format all of my documents from now on.&lt;/code&gt;|&lt;code&gt;&amp;#x3C;p&gt;I think I&apos;ll use it to format all of my documents from now on.&amp;#x3C;/p&gt;&lt;/code&gt;|I think I&apos;ll use it to format all of my documents from now on.|&lt;/p&gt;
&lt;h2&gt;段落（Paragraph）用法的最佳实践&lt;/h2&gt;
&lt;p&gt;不要用空格（spaces）或制表符（ tabs）缩进段落。&lt;/p&gt;
&lt;p&gt;|✅  Do this|❌  Don&apos;t do this|
|---|---|
|&lt;code&gt;Don&apos;t put tabs or spaces in front of your paragraphs.&lt;/code&gt;|&lt;code&gt;    This can result in unexpected formatting problems.&lt;/code&gt;|
|&lt;code&gt;Keep lines left-aligned like this.&lt;/code&gt;|&lt;code&gt;  Don&apos;t add tabs or spaces in front of paragraphs.&lt;/code&gt;|&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/markdown-duanluo.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/markdown-duanluo.webp"/></item><item><title>资源分享：涂鹿Toolooz</title><link>https://astro-pure.js.org/blog/zyfx-toolooz</link><guid isPermaLink="true">https://astro-pure.js.org/blog/zyfx-toolooz</guid><description>涂鹿Toolooz：曲线文字绘制设计工具，轻松创建沿任意路径排布的精美文字</description><pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;涂鹿Toolooz：曲线文字绘制设计工具，轻松创建沿任意路径排布的精美文字&lt;/h2&gt;
&lt;p&gt;　　涂鹿Toolooz，在线曲线文字绘制工具，可使文字沿任意路径排列，打造独特视觉效果。为您的徽标、标题、艺术作品赋予生命力与创意。&lt;/p&gt;
&lt;p&gt;　　支持自定义画布尺寸、文本内容、字体、间距、颜色、描边等，还支持多个绘图工具和选择文本是否重复，可导出为 PNG、WebP 和 SVG 格式，免费使用，无需注册。&lt;/p&gt;
&lt;h2&gt;网站介绍&lt;/h2&gt;
&lt;h3&gt;截图&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505191632987.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;特色&lt;/h3&gt;
&lt;h4&gt;自由绘制路径&lt;/h4&gt;
&lt;p&gt;　　使用鼠标或触控笔自由绘制路径，或选择预设形状如圆形、方形、椭圆等，轻松创建文字轨迹。&lt;/p&gt;
&lt;h4&gt;文本样式丰富&lt;/h4&gt;
&lt;p&gt;　　自定义字体、大小、颜色、间距等属性，支持文本背景带，打造丰富多样的文字效果。&lt;/p&gt;
&lt;h4&gt;交互式编辑&lt;/h4&gt;
&lt;p&gt;　　直观的选择、移动、缩放和旋转功能，让您精确控制每个文字路径的位置和外观。&lt;/p&gt;
&lt;h4&gt;灵活配置&lt;/h4&gt;
&lt;p&gt;　　自定义画布尺寸、背景色、缩放级别等，适应各种设计场景和需求。&lt;/p&gt;
&lt;h4&gt;多格式导出&lt;/h4&gt;
&lt;p&gt;　　将设计导出为PNG、SVG或WEBP格式，可自定义分辨率和尺寸，轻松应用于各种场景。&lt;/p&gt;
&lt;h4&gt;模板库&lt;/h4&gt;
&lt;p&gt;　　内置多种精美模板，一键应用，快速开始您的创意设计项目&lt;/p&gt;
&lt;h2&gt;应用场景&lt;/h2&gt;
&lt;p&gt;　　涂鹿曲线文字绘制设计工具适用于多种创意设计&lt;/p&gt;
&lt;p&gt;　　创建独特的环形或自定义形状品牌徽标，增强品牌视觉识别度。#社交媒体 #创意设计&lt;/p&gt;
&lt;p&gt;　　为社交媒体平台设计吸引眼球的曲线文字图片，提高内容吸引力。创意海报设计&lt;/p&gt;
&lt;p&gt;　　创建个性化海报和宣传材料，为活动和产品增添创意元素。&lt;/p&gt;
&lt;h2&gt;网站链接&lt;/h2&gt;
&lt;p&gt;　　&lt;a href=&quot;https://toolooz.com/&quot;&gt;https://toolooz.com&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;原文链接&lt;/h2&gt;
&lt;p&gt;　　https://www.appmiao.com/836/&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/toolooz.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/toolooz.webp"/></item><item><title>来将 Telegram 当音乐播放器吧！</title><link>https://astro-pure.js.org/blog/telegram-music</link><guid isPermaLink="true">https://astro-pure.js.org/blog/telegram-music</guid><description>来将 Telegram 当音乐播放器吧！（寻找音乐、即时歌词、无损音乐不失真压缩）</description><pubDate>Thu, 15 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;来将 Telegram 当音乐播放器吧！（寻找音乐、即时歌词、无损音乐不失真压缩）&lt;/h2&gt;
&lt;h3&gt;步骤一：到 &lt;a href=&quot;https://t.me/music_v1bot&quot;&gt;@music_v1bot&lt;/a&gt; 下载歌曲，并找到歌词&lt;/h3&gt;
&lt;p&gt;　　&lt;em&gt;输入指令： /search （你想要的歌名）&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505151340118.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;步骤二：&lt;a href=&quot;https://telegra.ph/Mtmanager-02-10-2&quot;&gt;下载 MT 管理器（点我）&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;开启：下载好的歌词文件&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505151343982.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;步骤三：最右上角、搜索&gt;勾选正则化，替换（全部替换）&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;输入：[(\d{2}:\d{2}).\d+]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;替换：$1&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注意：&quot;$1&quot;后面要加一个空格(英文)。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505151346330.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;代码作者：Aric&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　并将选取好的歌词，粘贴到音乐文件就完成了。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://t.me/TESTLIVEUP&quot;&gt;（我是范例-点我查看）&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用：“.FLAC“格式的音乐文件，有时候不能正常显示歌词时间轴，是正常的，所以你可能要转换特定的格式，如.mp3，或是.ogg 或.m4a 的歌曲。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　→ 如果你对音乐品质有极致追求，也有电脑 🖥️，我个人极度推荐使用 dBpowerAMP 这类型工具，将无损音乐格式转换成 m4a （水果的算法：QAAC 编码的音乐），目前可以&lt;a href=&quot;https://telegra.ph/QAAC-%E5%8E%8B%E7%BC%A9%E9%9F%B3%E4%B9%90%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3-08-22&quot;&gt;算是当今世界上最好的压缩算法，在通讯界享有盛名&lt;/a&gt;，且压缩后可以到接近百分之百还原。（甚至连对音乐/声学研究的职业工作者都讚叹不已）笔者强烈推荐，只叹手机没有类似的软件。专门转成 QAAC 编码的。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://t.me/haoruanfenxianggroup/369211&quot;&gt;🖥️ 电脑版 dBpowerAMP 下载/教学请点我&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505151358822.jpg&quot; alt=&quot;&quot;&gt;​&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;拓展&lt;/h3&gt;
&lt;p&gt;　　以上是原文内容，如果你改了音乐格式失去了原本的封面，歌手等等东西，一般来说是不妨碍什么的，如果你一定要改的话，可以使用&lt;a href=&quot;https://t.me/kemiaosw_me/394&quot;&gt;音乐标签&lt;/a&gt;。具体使用很简单，我不多赘述，给个视频你就大致明白了：​&lt;/p&gt;
&lt;p&gt;　　同时，如果你想更换音乐格式，有很多种方法，以下给一个&lt;a href=&quot;https://convertio.co/zh/flac-m4a/&quot;&gt;网站&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;原文链接&lt;/h3&gt;
&lt;p&gt;　　&lt;a href=&quot;https://telegra.ph/Telegram-Real-Time-sync-lyrics-05-14&quot;&gt;https://telegra.ph/Telegram-Real-Time-sync-lyrics-05-14&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　‍&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/telegram-music.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/telegram-music.webp"/></item><item><title>DROP：便捷大文件分享与托管网站，免费享10GB空间免费部署</title><link>https://astro-pure.js.org/blog/drop</link><guid isPermaLink="true">https://astro-pure.js.org/blog/drop</guid><description>DROP 是一个便捷的文件分享与托管平台，云存储工具，提供免费10GB的存储空间，支持大文件的快速上传与分享。</description><pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;h2&gt;网站简介&lt;/h2&gt;
&lt;p&gt;DROP 是一个便捷的文件分享与托管平台，云存储工具，提供免费10GB的存储空间，支持大文件的快速上传与分享。&lt;/p&gt;
&lt;p&gt;支持上传图片、视频、压缩文件和PDF，选择适合文件的文档后，点击拷贝链接即可直接获得分享链接。采用AI驱动技术，确保文件传输的高效性和安全性，同时提供简洁直观的用户界面，方便用户管理和分享文件。DROP 适用于个人用户和创作者，可轻松展示和分发作品&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;截图&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505092144042.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;功能特色&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;免费10GB存储&lt;/strong&gt;：新用户可免费享受10GB的存储空间，满足日常文件分享需求。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;大文件支持&lt;/strong&gt;：支持大文件的快速上传与分享，适合分享高清视频、大型文档等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI驱动&lt;/strong&gt;：采用AI技术优化文件传输和管理，提升用户体验。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隐私保护&lt;/strong&gt;：提供文件访问控制，保护用户隐私和数据安全。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;简洁界面&lt;/strong&gt;：直观的用户界面，易于上手，方便文件管理。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多平台支持&lt;/strong&gt;：支持多种设备和操作系统，方便随时随地访问文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;网站地址&lt;/h2&gt;
&lt;p&gt;https://drop.space&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;原文链接&lt;/strong&gt;: https://www.appmiu.com/31115.html&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/drop.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/drop.webp"/></item><item><title>tgtalk免费部署</title><link>https://astro-pure.js.org/blog/tgtalk</link><guid isPermaLink="true">https://astro-pure.js.org/blog/tgtalk</guid><description>一个基于 Cloudflare Workers 的 tg 频道消息说说。</description><pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;h2&gt;部署 API&lt;/h2&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://gist.github.com/FloatSheep/55db67d9e8148149ebbcb0f9f6b0d901&quot;&gt;Gist&lt;/a&gt; 并获取其中所有代码&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;需要注意，本 API Worker 脚本基于 ChenYFan 修改，包含了本项目需要使用的功能，请勿随意更改脚本内容
TGTalker-Frontend V2 的 API 不兼容 V1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;进入 &lt;a href=&quot;https://dash.cloudflare.com&quot;&gt;Cloudflare 仪表盘&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;选择创建应用程序 -&gt; 创建 Worker -&gt; 修改名称（部署）-&gt; 编辑代码&lt;/p&gt;
&lt;p&gt;在其中粘贴你复制的所有代码，并且修改 ChannelName 为你的频道名称，部署并访问 Worker 查看是否能正确返回内容&lt;/p&gt;
&lt;p&gt;接着你可以为你的 Worker 绑定一个域名&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505042340004.png&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505042340138.png&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://cdn.jsdelivr.net/gh/kmfx/tuchuang@main/img/202505042340963.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;保存，然后将你绑定的域名填入配置中的 api 项即可&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/tgtalk.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/tgtalk.webp"/></item><item><title>Waline评论在Vercel部署</title><link>https://astro-pure.js.org/blog/waline</link><guid isPermaLink="true">https://astro-pure.js.org/blog/waline</guid><description>使用Waline评论我喜欢使用的部署方法(个人认为最简便)</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用Waline评论我喜欢使用的部署方法(个人认为最简便)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;所需账号&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;一个Github账号&lt;/li&gt;
&lt;li&gt;一个Vercel账号&lt;/li&gt;
&lt;li&gt;一个leancloud账号(最好是国际服的，你有了Github难道还用大陆的吗？大陆的要备案，故在这里不阐述，末尾放原文链接)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;在 leancloud 里创建数据库&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://console.leancloud.app/login&quot;&gt;登录&lt;/a&gt; 或 &lt;a href=&quot;https://console.leancloud.app/register&quot;&gt;注册&lt;/a&gt; &lt;code&gt;LeanCloud 国际版&lt;/code&gt; 并进入 &lt;a href=&quot;https://console.leancloud.app/apps&quot;&gt;控制台&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击左上角 &lt;a href=&quot;https://console.leancloud.app/apps&quot;&gt;创建应用&lt;/a&gt; 并起一个你喜欢的名字 (请选择免费的开发版):&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/7FOYbvS8MlQXe52.png&quot; alt=&quot;创建应用&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入应用，选择左下角的 &lt;code&gt;设置&lt;/code&gt; &gt; &lt;code&gt;应用 Key&lt;/code&gt;。你可以看到你的 &lt;code&gt;APP ID&lt;/code&gt;,&lt;code&gt;APP Key&lt;/code&gt; 和 &lt;code&gt;Master Key&lt;/code&gt;。请记录它们，以便后续使用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/c1Vltvsm8GYXSbf.png&quot; alt=&quot;ID 和 Key&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;在 Vercel 部署&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwalinejs%2Fwaline%2Ftree%2Fmain%2Fexample&quot;&gt;&lt;img src=&quot;https://vercel.com/button&quot; alt=&quot;Vercel&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;点击上方按钮，跳转至 Vercel 进行 Server 端部署。&lt;/p&gt;
&lt;p&gt;::: note&lt;/p&gt;
&lt;p&gt;如果你未登录的话，Vercel 会让你注册或登录，请使用 GitHub 账户进行快捷登录。&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入一个你喜欢的 Vercel 项目名称并点击 &lt;code&gt;Create&lt;/code&gt; 继续:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/XauJLO7hfcWVx2Y.png&quot; alt=&quot;创建项目&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;此时 Vercel 会基于 Waline 模板帮助你新建并初始化仓库，仓库名为你之前输入的项目名。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/Q7tExaML3XKlf12.png&quot; alt=&quot;deploy&quot;&gt;&lt;/p&gt;
&lt;p&gt;一两分钟后，满屏的烟花会庆祝你部署成功。此时点击 &lt;code&gt;Go to Dashboard&lt;/code&gt; 可以跳转到应用的控制台。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/HqfvwV6GdrFROSZ.png&quot; alt=&quot;deploy&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击顶部的 &lt;code&gt;Settings&lt;/code&gt; - &lt;code&gt;Environment Variables&lt;/code&gt; 进入环境变量配置页，并配置三个环境变量 &lt;code&gt;LEAN_ID&lt;/code&gt;, &lt;code&gt;LEAN_KEY&lt;/code&gt; 和 &lt;code&gt;LEAN_MASTER_KEY&lt;/code&gt; 。它们的值分别对应上一步在 LeanCloud 中获得的 &lt;code&gt;APP ID&lt;/code&gt;, &lt;code&gt;APP KEY&lt;/code&gt;, &lt;code&gt;Master Key&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/9laMFio1umnjB6g.png&quot; alt=&quot;设置环境变量&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;环境变量配置完成之后点击顶部的 &lt;code&gt;Deployments&lt;/code&gt; 点击顶部最新的一次部署右侧的 &lt;code&gt;Redeploy&lt;/code&gt; 按钮进行重新部署。该步骤是为了让刚才设置的环境变量生效。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/WkVxeRub73aIHBX.png&quot; alt=&quot;redeploy&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;此时会跳转到 &lt;code&gt;Overview&lt;/code&gt; 界面开始部署，等待片刻后 &lt;code&gt;STATUS&lt;/code&gt; 会变成 &lt;code&gt;Ready&lt;/code&gt;。此时请点击 &lt;code&gt;Visit&lt;/code&gt; ，即可跳转到部署好的网站地址，此地址即为你的服务端地址。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/xM8rEezGTqFQNCY.png&quot; alt=&quot;redeploy success&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;绑定域名 (可选)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;点击顶部的 &lt;code&gt;Settings&lt;/code&gt; - &lt;code&gt;Domains&lt;/code&gt; 进入域名配置页&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入需要绑定的域名并点击 &lt;code&gt;Add&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/9wHyLEWQOtvz1fA.png&quot; alt=&quot;Add domain&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在域名服务器商处添加新的 &lt;code&gt;CNAME&lt;/code&gt; 解析记录&lt;/p&gt;
&lt;p&gt;| Type  | Name    | Value                                                       |
| ----- | ------- | ----------------------------------------------------------- |
| CNAME | example | cname.vercel-dns.com(国区的可用 cname-china.vercel-dns.com) |&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等待生效，你可以通过自己的域名来访问了:tada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;评论系统：example.yourdomain.com&lt;/li&gt;
&lt;li&gt;评论管理：example.yourdomain.com/ui&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/14/4BOxqfs16erKTMV.png&quot; alt=&quot;success&quot;&gt;&lt;/p&gt;
&lt;h2&gt;HTML 引入 (客户端)&lt;/h2&gt;
&lt;p&gt;在你的网页中进行如下设置:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;导入 Waline 样式 &lt;code&gt;https://unpkg.com/@waline/client@v3/dist/waline.css&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建 &lt;code&gt;&amp;#x3C;script&gt;&lt;/code&gt; 标签使用来自 &lt;code&gt;https://unpkg.com/@waline/client@v3/dist/waline.js&lt;/code&gt; 的 &lt;code&gt;init()&lt;/code&gt; 函数初始化，并传入必要的 &lt;code&gt;el&lt;/code&gt; 与 &lt;code&gt;serverURL&lt;/code&gt; 选项。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;el&lt;/code&gt; 选项是 Waline 渲染使用的元素，你可以设置一个字符串形式的 CSS 选择器或者一个 HTMLElement 对象。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;serverURL&lt;/code&gt; 是服务端的地址，即上一步获取到的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;head&gt;
  &amp;#x3C;!-- ... --&gt;
  &amp;#x3C;link
    rel=&quot;stylesheet&quot;
    href=&quot;https://unpkg.com/@waline/client@v3/dist/waline.css&quot;
  /&gt;
  &amp;#x3C;!-- ... --&gt;
&amp;#x3C;/head&gt;
&amp;#x3C;body&gt;
  &amp;#x3C;!-- ... --&gt;
  &amp;#x3C;div id=&quot;waline&quot;&gt;&amp;#x3C;/div&gt;
  &amp;#x3C;script type=&quot;module&quot;&gt;
    import { init } from &apos;https://unpkg.com/@waline/client@v3/dist/waline.js&apos;;

    init({
      el: &apos;#waline&apos;,
      serverURL: &apos;https://your-domain.vercel.app&apos;,
    });
  &amp;#x3C;/script&gt;
&amp;#x3C;/body&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;评论服务此时就会在你的网站上成功运行 :tada:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;评论管理 (管理端)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;部署完成后，请访问 &lt;code&gt;&amp;#x3C;serverURL&gt;/ui/register&lt;/code&gt; 进行注册。首个注册的人会被设定成管理员。&lt;/li&gt;
&lt;li&gt;管理员登陆后，即可看到评论管理界面。在这里可以修改、标记或删除评论。&lt;/li&gt;
&lt;li&gt;用户也可通过评论框注册账号，登陆后会跳转到自己的档案页。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;视频教程&lt;/h2&gt;
&lt;p&gt;以下是热心用户制作的视频教程，以上操作不清楚的也可以参考一二。&lt;/p&gt;
&lt;h3&gt;Waline 部署教程（快速上手）&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;UP 主：&lt;a href=&quot;https://space.bilibili.com/381992209&quot;&gt;rickroll 摇&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;使用 Vercel 简单地部署 Waline 评论系统&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;UP 主：&lt;a href=&quot;https://space.bilibili.com/355877984&quot;&gt;岚天呀&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;以上为部分修改原文&lt;/h2&gt;
&lt;p&gt;原文链接: https://waline.js.org/guide/get-started/&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/waline.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/waline.webp"/></item><item><title>Umami博客访问统计Vercel+Cloudflare Wokers部署</title><link>https://astro-pure.js.org/blog/umami</link><guid isPermaLink="true">https://astro-pure.js.org/blog/umami</guid><description>Umami博客访问统计Vercel+Cloudflare Wokers部署教程，附带效果图展示。</description><pubDate>Sun, 06 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;h2&gt;第一部分：Vercel+Umami&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;第一步
1.1 Fork​&lt;a href=&quot;https://github.com/umami-software/umami&quot;&gt;umami&lt;/a&gt;到自己的Github仓库&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/c4xDVNrsBpTM8YZ.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;1.2 创建项目
&lt;img src=&quot;https://s2.loli.net/2025/04/06/GX9OdivuxF5pJzH.webp&quot; alt=&quot;&quot;&gt;
index.mdx&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第二步&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;　2.1 创建&lt;a href=&quot;https://vercel.com/login&quot;&gt;Verce&lt;/a&gt;l账号，这里我就省略了，因为GitHub可以直接进行授权即可。&lt;/p&gt;
&lt;p&gt;2.2 在你授权以后，首先创建Postgres数据库，直接一路下一步，创建好就行，可以给下面的连接复制出来&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/K69FpfmjZxcu3Ad.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/7OieEKGht4kgSux.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　点击Copy Snippet​,就可以，记住在粘贴的时候是我画线里面的部分，双引号都不需要 ，因为要设置环境变量。&lt;/p&gt;
&lt;p&gt;　　 2.3 在创建好数据库以后，回到主页面的Overview​，然后右上角有一个Add New​选择添加Project​，选择你Fork​的umami​，添加即可。
2.4 设置环境变量，&lt;code&gt;DATABASE_URL&lt;/code&gt;​和&lt;code&gt;HASH_SALT&lt;/code&gt;​和&lt;code&gt;TRACKER_SCRIPT_NAME&lt;/code&gt;​，其中&lt;code&gt;DATABASE_URL&lt;/code&gt;​的值就是上面划线的部分，其他的两个环境变量都是对应的值是String自己可以随意定义。
　　 2.5 设置好以后点击Deploy​，等待大约两分钟左右，自动部署完成，部署完成以后可以通过下图种面板上面给的链接可以直接访问。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/ahX2wHLrfYAD7ZW.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　 2.6 打开以后会跳出登录地址，默认的登录密码是adminumami​，登录进去以后，设置给自己密码修改了，然后就是设置里面添加网站，给你要统计的网站添加进去，到此，别人访问你的网站你可以通过面板看到统计数据了。&lt;/p&gt;
&lt;h2&gt;第二部分：Umami+Cloudflare worker&lt;/h2&gt;
&lt;p&gt;这一部分主要是让你的博客上面能展示的访问数据，效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/fR71aFG4oMD29Pz.webp&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;注册CloudFlare​账号，然后进去以后，选择Workers​和Pages​，点击创建​，再点击部署&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/CYojqdGHkiuFepQ.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/6B2rXxk4Uu71GQC.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　部署以后，进去点击编辑代码，将里面的代码进行替换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;addEventListener(&apos;fetch&apos;, event =&gt; {
  event.respondWith(handleRequest(event));
});

const API_BASE_URL = &apos;https://umami.yourdomain.com&apos;;  // 替换你的刚才部署的umami的域名
const TOKEN = &apos;your_token&apos;; // 获取的token
const WEBSITE_ID = &apos;your_website_id&apos;; // 在umami添加网站的 webstie id
const CACHE_KEY = &apos;umami_cache&apos;;
const CACHE_TIME = 600; // Cache time in seconds

async function fetchUmamiData(startAt, endAt) {
  const url = `${API_BASE_URL}/api/websites/${WEBSITE_ID}/stats?startAt=${startAt}&amp;#x26;endAt=${endAt}`;
  const response = await fetch(url, {
    headers: {
      &apos;Authorization&apos;: `Bearer ${TOKEN}`,
      &apos;Content-Type&apos;: &apos;application/json&apos;
    }
  });

  if (!response.ok) {
    console.error(`Error fetching data: ${response.statusText}`);
    return null;
  }

  return response.json();
}

async function handleRequest(event) {
  const cache = await caches.open(CACHE_KEY);
  const cachedResponse = await cache.match(event.request);

  if (cachedResponse) {
    return cachedResponse;
  }

  const now = Date.now();
  const todayStart = new Date(now).setHours(0, 0, 0, 0);
  const yesterdayStart = new Date(now - 86400000).setHours(0, 0, 0, 0);
  const lastMonthStart = new Date(now).setMonth(new Date(now).getMonth() - 1);
  const lastYearStart = new Date(now).setFullYear(new Date(now).getFullYear() - 1);

  const [todayData, yesterdayData, lastMonthData, lastYearData] = await Promise.all([
    fetchUmamiData(todayStart, now),
    fetchUmamiData(yesterdayStart, todayStart),
    fetchUmamiData(lastMonthStart, now),
    fetchUmamiData(lastYearStart, now)
  ]);

  const responseData = {
    today_uv: todayData?.visitors?.value ?? null,
    today_pv: todayData?.pageviews?.value ?? null,
    yesterday_uv: yesterdayData?.visitors?.value ?? null,
    yesterday_pv: yesterdayData?.pageviews?.value ?? null,
    last_month_pv: lastMonthData?.pageviews?.value ?? null,
    last_year_pv: lastYearData?.pageviews?.value ?? null
  };

  const jsonResponse = new Response(JSON.stringify(responseData), {
    headers: {
      &apos;Content-Type&apos;: &apos;application/json&apos;,
      &apos;Access-Control-Allow-Origin&apos;: &apos;*&apos;,
      &apos;Access-Control-Allow-Methods&apos;: &apos;GET, POST, PUT, DELETE, OPTIONS&apos;,
      &apos;Access-Control-Allow-Headers&apos;: &apos;Content-Type, Authorization&apos;
    }
  });

  event.waitUntil(cache.put(event.request, jsonResponse.clone()));

  return jsonResponse;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　但是里面有几个比较重要的参数需要修改&lt;code&gt;API_BASE_URL&lt;/code&gt;​、&lt;code&gt;TOKEN&lt;/code&gt;​、&lt;code&gt;WEBSITE_ID&lt;/code&gt;​其中&lt;code&gt;API_BASE_URL&lt;/code&gt;​和&lt;code&gt;WEBSITE_ID&lt;/code&gt;​已经是有的，&lt;code&gt;WEBSITE_ID&lt;/code&gt;​在umami​中的设置，选择你已经添加好的网站，点击编辑​，会出现网站的&lt;code&gt;WEBSITE_ID&lt;/code&gt;​：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/eFHEYB45nQOUAML.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　 2.2 获取token​，在想api​测试网站，&lt;a href=&quot;https://hoppscotch.io/&quot;&gt;hoppscotch&lt;/a&gt;，跳转到这个页面以后，如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/06/vXrQmtpu4HdIasN.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　  2.2.1 请求方式选择post​，链接填写方式是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://你的umami域名或者是链接/api/auth/login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　  2.2.2 请求体选择Body​参数格式选择application/json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 &quot;username&quot;:&quot;用户名&quot;,
 &quot;password&quot;:&quot;密码&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　  2.2.3 返回结果中token​里面的内容就是需要的token&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;token&quot;: &quot;你的token&quot;, # 你需要记录下来的内容
  &quot;user&quot;: {
    &quot;id&quot;: &quot;41e2b680-648e-4b09-bcd7-3e2b10c06264&quot;,
    &quot;username&quot;: &quot;admin&quot;,
    &quot;role&quot;: &quot;admin&quot;,
    &quot;createdAt&quot;: &quot;2024-11-12T09:18:12.766Z&quot;,
    &quot;isAdmin&quot;: true
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　到这里，你部署&lt;code&gt;api&lt;/code&gt;​所需要的所有参数内容都已经有了，给替换进去即可。&lt;/p&gt;
&lt;p&gt;　　 2.3 测试在你部署好以后，会有一个链接，当然你如果是用cloudflare​代理你的域名，可以直接进行关联。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/07/IPCS2rhLbiaX3G8.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　然后点击或则是复制粘贴到浏览器，请求以后会出来下面的结果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/07/M9wsiYKBoGyLI8T.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;　　如果没有结果，建议你先去你部署的umami面板里面看看有没有数据，有数据的情况下，这里请求都会有数据的，清理浏览器缓存开代理在测试。&lt;/p&gt;
&lt;h2&gt;第三部分：添加博客统计&lt;/h2&gt;
&lt;p&gt;　　将数据添加到about​页面&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tj: # 统计
  provider: custom # custom
  url: 你的数据接口地址
  img: https://7.isyangs.cn/1/65eb2e9109826-1.png # 背景
  desc: # 卡片左下角描述
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　配置完成~&lt;/p&gt;
&lt;p&gt;　　感谢&lt;a href=&quot;https://blog.starsharbor.com/&quot;&gt;starsharbor&lt;/a&gt;大佬博客的指导，&lt;a href=&quot;https://blog.starsharbor.com/posts/solitude-about_umami/&quot;&gt;原文&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;作者原文&lt;/h2&gt;
&lt;p&gt;作者: Couture
链接: https://www.coutures.top/posts/27233.html
来源: Couture
著作权归作者所有。 商业转载请联系作者获得授权，非商业转载请注明出处。&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/umami.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/umami.webp"/></item><item><title>Git 同步上游仓库的更新</title><link>https://astro-pure.js.org/blog/git-deploy</link><guid isPermaLink="true">https://astro-pure.js.org/blog/git-deploy</guid><description>使用一个 Github Template 创建了我自己的仓库，需要同步一下补丁更新，总不能自己手抄一遍吧，搜了一下解决方案。记录一下。</description><pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;h2&gt;Git 同步上游仓库的更新&lt;/h2&gt;
&lt;p&gt;　　使用一个 Github Template 创建了我自己的仓库，需要同步一下补丁更新，总不能自己手抄一遍吧，搜了一下解决方案。&lt;/p&gt;
&lt;p&gt;　　记录一下。&lt;/p&gt;
&lt;h3&gt;添加上游仓库&lt;/h3&gt;
&lt;p&gt;　　给上游仓库取个名字，如果将命名为 &lt;code&gt;upstream&lt;/code&gt;​ ，可以在本地仓库中运行以下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git remote add upstream https://github.com/$&amp;#x3C;upstream-repo&gt;.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;获取上游仓库的更改&lt;/h3&gt;
&lt;p&gt;　　运行以下命令以获取上游仓库中的所有分支和提交：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git fetch upstream
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;合并上游更改&lt;/h3&gt;
&lt;p&gt;　　现在，将上游 main 分支的更改合并到您的本地 main 分支：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git merge upstream/main --allow-unrelated-histories
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　如果只需要合并特定的 commit ：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git cherry-pick &amp;#x3C;commit-hash&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　也可以使用&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;gcp &amp;#x3C;commit-hash&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　commit-hash 可以直接从 github 网页上复制。&lt;/p&gt;
&lt;p&gt;　　这时 commit 的作者是源仓库的作者， Vercel 提示我 Build 失败，需要升级到 Pro，可以再修改一个文件，自己添加一条 commit 。&lt;/p&gt;
&lt;p&gt;　　当然这很不优雅，可以使用下面的命令获取更改到文件，但是不会提交 commit ，&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git cherry-pick &amp;#x3C;commit-hash&gt; --no-commit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　然后手动提交一下&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git commit -m &quot;commit information&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;解决冲突&lt;/h3&gt;
&lt;p&gt;　　如何自己已经修改过源代码，在合并过程中可能发生冲突，需要手动解决。&lt;br&gt;
Git 也会进行提示，手动编辑冲突文件并保存，然后再提交更改。&lt;/p&gt;
&lt;h3&gt;批量提交&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git cherry-pick &amp;#x3C;起始提交&gt;^..&amp;#x3C;结束提交&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　如果有冲突会按照顺序处理，然后执行， continue 直到结束&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git cherry-pick --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;​&lt;code&gt;&amp;#x3C;起始提交&gt;&lt;/code&gt;​：范围的开始点（不包含此提交，除非用 &amp;#x3C;起始提交&gt;~ 或 &amp;#x3C;起始提交&gt;^）。&lt;/li&gt;
&lt;li&gt;​&lt;code&gt;&amp;#x3C;结束提交&gt;&lt;/code&gt;​：范围的结束点（包含此提交）。&lt;/li&gt;
&lt;li&gt;​&lt;code&gt;^&lt;/code&gt;​ 是 Git 的语法，用于指定“之前的提交”。&lt;/li&gt;
&lt;li&gt;​&lt;code&gt;..&lt;/code&gt;​ 表示范围。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;推送&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git push origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　当然默认来说，并不会推送到新加入的 &lt;code&gt;upstream&lt;/code&gt;​ ，直接 &lt;code&gt;git push&lt;/code&gt;​ 即可&lt;/p&gt;
&lt;p&gt;　　如果不再需要同步，可以删除上游的仓库&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git remote remove upstream
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/git-tongbu.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/git-tongbu.webp"/></item><item><title>Markdown-标题语法 | 技术分享</title><link>https://astro-pure.js.org/blog/biaotiyufa</link><guid isPermaLink="true">https://astro-pure.js.org/blog/biaotiyufa</guid><description>记录 Markdown 语法的标题语法,方便学习和查找。</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;p&gt;原文位置: https://markdown.com.cn/basic-syntax/headings.html&lt;/p&gt;
&lt;h1&gt;Markdown 标题语法&lt;/h1&gt;
&lt;p&gt;要创建标题，请在单词或短语前面添加井号 (#) 。&lt;code&gt;#&lt;/code&gt; 的数量代表了标题的级别。例如，添加三个 &lt;code&gt;#&lt;/code&gt; 表示创建一个三级标题 (&lt;code&gt;&amp;#x3C;h3&gt;&lt;/code&gt;) (例如：&lt;code&gt;### My Header&lt;/code&gt;)。&lt;/p&gt;
&lt;p&gt;| Markdown语法      | HTML                       | 预览效果                |
| ----------------- | -------------------------- | ----------------------- |
| &lt;code&gt;# Heading level 1&lt;/code&gt; | &amp;#x3C;h1&gt;Heading level 1&amp;#x3C;/h1&gt; |Heading level 1|
| &lt;code&gt;## Heading level 2&lt;/code&gt; | &amp;#x3C;h2&gt;Heading level 1&amp;#x3C;/h2&gt; | Heading level 2 |
| &lt;code&gt;### Heading level 3&lt;/code&gt; | &amp;#x3C;h3&gt;Heading level 1&amp;#x3C;/h3&gt; | Heading level 3 |
| &lt;code&gt;#### Heading level 4&lt;/code&gt; | &amp;#x3C;h4&gt;Heading level 1&amp;#x3C;/h4&gt; | Heading level 4 |
| &lt;code&gt;##### Heading level 5&lt;/code&gt; | &amp;#x3C;h5&gt;Heading level 1&amp;#x3C;/h5&gt; | Heading level 5 |
| &lt;code&gt;###### Heading level 6&lt;/code&gt; | &amp;#x3C;h6&gt;Heading level 1&amp;#x3C;/h6&gt; | Heading level 6 |&lt;/p&gt;
&lt;h2&gt;可选语法&lt;/h2&gt;
&lt;p&gt;还可以在文本下方添加任意数量的 == 号来标识一级标题，或者 -- 号来标识二级标题。&lt;/p&gt;
&lt;p&gt;| Markdown语法                            | HTML                       | 预览效果 |
| --------------------------------------- | -------------------------- | ---------------------------------------- |
| &lt;code&gt;Heading level 1&lt;/code&gt;&lt;code&gt;===============&lt;/code&gt; | &amp;#x3C;h1&gt;Heading level 1&amp;#x3C;/h1&gt; | Heading level 1                 |
| &lt;code&gt;Heading level 2&lt;/code&gt;&lt;code&gt;---------------&lt;/code&gt;   | &amp;#x3C;h2&gt;Heading level 2&amp;#x3C;/h2&gt; | Heading level 2                 |&lt;/p&gt;
&lt;h2&gt;最佳实践&lt;/h2&gt;
&lt;p&gt;不同的 &lt;strong&gt;Markdown&lt;/strong&gt; 应用程序处理 &lt;code&gt;#&lt;/code&gt; 和标题之间的空格方式并不一致。为了兼容考虑，请用一个空格在 &lt;code&gt;#&lt;/code&gt; 和标题之间进行分隔。&lt;/p&gt;
&lt;p&gt;| ✅  Do this           | ❌  Don&apos;t do this    |
| -------------------- | ------------------- |
| &lt;code&gt;# Here&apos;s a Heading&lt;/code&gt; | &lt;code&gt;#Here&apos;s a Heading&lt;/code&gt; |&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/yufa.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/yufa.webp"/></item><item><title>Markdown-速查表</title><link>https://astro-pure.js.org/blog/zonglanbiao</link><guid isPermaLink="true">https://astro-pure.js.org/blog/zonglanbiao</guid><description>记录 Markdown 的用法，便于查找。</description><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { LinkPreview } from &apos;astro-pure/advanced&apos;
import { Collapse } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原文位置: https://markdown.com.cn/cheat-sheet.html#%E6%80%BB%E8%A7%88&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;总览&lt;/h1&gt;
&lt;p&gt;Markdown 速查表提供了所有 &lt;strong&gt;Markdown&lt;/strong&gt;
语法元素的基本解释。如果你想了解某些语法元素的更多信息，请参阅更详细的
&lt;strong&gt;基本语法&lt;/strong&gt; 和 &lt;strong&gt;扩展语法&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;基本语法&lt;/h2&gt;
&lt;p&gt;这些是 &lt;strong&gt;John Gruber&lt;/strong&gt; 的原始设计文档中列出的元素。所有 &lt;strong&gt;Markdown&lt;/strong&gt;
应用程序都支持这些元素。&lt;/p&gt;
&lt;p&gt;| 元素 | Markdown 语法 |
|----|----|
| 标题（Heading） | \ # H1 一级标题 \ ## H2 二级标题 \ ### H3 三级标题 |
| 粗体（Bold） | **bold text** |
| 斜体（Italic） | *italicized text* |
| 引用块（Blockquote） | &gt; blockquote |
| 有序列表（Ordered List） | 1. First item 2. Second item 3. Third item |
| 无序列表（Unordered List） | - First item - Second item - Third item |
| 代码（Code） | `code` |
| 分隔线（Horizontal Rule） | — |
| 链接（Link） | [title](https://www.example.com) |
| 图片（Image） | ![alt text](image.jpg) |&lt;/p&gt;
&lt;h2&gt;扩展语法&lt;/h2&gt;
&lt;p&gt;这些元素通过添加额外的功能扩展了基本语法。但是，并非所有 &lt;strong&gt;Markdown&lt;/strong&gt;
应用程序都支持这些元素。&lt;/p&gt;
&lt;p&gt;| 元素 | Markdown 语法 |
|:--:|:---|
| 表格（Table） | &lt;code&gt;\| Syntax \| Description \|&lt;/code&gt;&lt;code&gt;\| -----------  \|  -----------  \|&lt;/code&gt;&lt;code&gt;\| Header  \|  Title  \|&lt;/code&gt;&lt;code&gt;\| Paragraph \| Text \|&lt;/code&gt; |
| 代码块（Fenced Code Block） | &lt;code&gt;```&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;code&gt;&quot;firstName&quot;: &quot;John&quot;,&lt;/code&gt;&lt;code&gt;&quot;lastName&quot;: &quot;Smith&quot;,&lt;/code&gt;&lt;code&gt;&quot;age&quot;: 25&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;code&gt;```&lt;/code&gt; |
| 脚注（Footnote） | Here’s a sentence with a footnote. &lt;code&gt;[^1]&lt;/code&gt;&lt;code&gt;[^1]&lt;/code&gt;: This is the footnote. |
| 标题编号（Heading ID） | \ ### My Great Heading |
| 定义列表（Definition List） | term: definition |
| 任务列表（Task List）| &lt;code&gt;- [x] Write the press release&lt;/code&gt;&lt;code&gt;- [ ] Update the website&lt;/code&gt;&lt;code&gt;- [ ] Contact the media&lt;/code&gt; |&lt;/p&gt;</content:encoded><h:img src="https://img.314926.xyz/images/2025/07/10/sulanbiao.webp"/><enclosure url="https://img.314926.xyz/images/2025/07/10/sulanbiao.webp"/></item></channel></rss>